Romlige forskjeller i næringsstruktur, virkninger av eksogene sjokk i basissysselsettingen, og lokale forskjeller I sysselsettingsvekst.

I denne oppgaven vil vi se på næringsstrukturer på Haugalandet, Sunnhordland og Hardanger.

Problemstillinger og beregninger vi vil se nærmere på

Oversikt over befolkningene i regionene

Haugalandet

Haugalandet består av kommunene Bokn (852), Haugesund (37357), Karmøy (42186), Sauda (4595), Tysvær(11065), Utsira(198) og Vindafjord(8714). tilsammen bor det 104967 personer i denne regionen. i tidsperioden vi har hentet inn data har det vert kommunesammenslåing i denne regionen. Da ble Ølen og vindafjord slått i sammen til en kommune (hvordan har vi tatt hensyn til dette???)

Sunnhordland og Ullensvang

Sunnhordland og Ullensvang består av kommunene Bømlo(11957), Etne(4062), Fitjar(3189), Kvinnherad(13071), Stord(18759), Sveio(5766), Tysnes(2869) og Ullensvang(11048). Tilsammen bor det 70721 personer i denne regionen.

Tallene er hentet fra SSB 09.01.21 (https://www.ssb.no/statbank/table/01223/tableViewLayout1/) gjelder for 4 kvartal 2020.

1 Sysselsetting I Ulike Næringer, Etter Arbeidssted

Haugalandet

Første regionen vi velger å se på er Haugalandet. Her ønsker vi å se på utviklingen fra 2008 til 2020, av antall ansatte i sin helhet i regionen, samt de 6 mest relevante næringene.

I 2020 er det i underkant av 50 000 ansatte i alle næringer på Haugalandet. Av Fig. 1 ser vi at Haugalandet fikk en nedgang i antall ansatte i 2015 og 2016. I 2017 og 2018 ble det vekst, frem til det snudde i 2019 igjen.

I Fig. 2 ser vi at flere av kommunene på Haugalandet har hatt liten arbeidsplassvekst, med unntak av Tysvær, Vindafjord og Karmøy i den siste tiårsperioden. Vi ser dette mer tydelig på fig. 3 og 4.

Figur 3 og 4 viser utviklingen av det totale antall ansatte i alle næringer på kommunalt nivå, innenfor Haugaland-regionen.

I disse figurene, så ser vi tydelig at Haugesund har hatt reduksjon i antall ansatte totalt sett, mens Karmøy, Vindafjord og Tysvær har hatt en markant vekst de siste ti årene. Siden Haugesund har flest arbeidsplasser betyr utviklingen i Haugesund mye for de samlede tallene.

Warning: Removed 1 row(s) containing missing values (geom_path).

Warning: Removed 1 row(s) containing missing values (geom_path).

Figur 5 og 6 viser utviklingen av de 6 mest relevante næringene i Haugalandsregionen på kommune nivå.

Vi ser i de tre største kommunene, Haugesund, Karmøy og Vindafjord utgjør næringene Helse- og Sosialtjenester og Industri de største. Helse- og Sosialtjenester har vokst jevnt og trutt de siste tiårene, mens antall ansatte i industrinæringen har variert fra kommune til kommune. I Haugalandet utgjør primærnæringer (jordbruk, Skogbrug og Fiske) en større andel, enn hos Karmøy og Haugesund hvor primærnæringene kun utgjøre en liten andel.

Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.

Det er relativt store kommunevise forskjeller i næringsstrukturen. Rogaland har en forholdsvis ensidig næringsstruktur, olje og gass er dominerende. Fylket er suverent dominerende for fossil energi. De har for øvrig de siste årene satset på et en mer differensiert næringsstruktur og næringsliv ved å satse på helse, IKT og fornybar energi.

I våre modeller, er satsingen på helse den mest tydelige. Av rent tekniske grunner er det vanskelig å se utviklingen i enkelte næringer som utgjør små andeler, på grunn av skalaen som er benyttet. Til tross for dette, kan man se at næringsstrukturen i regionen samlet generelt sett har endret seg lite.

Rogaland har gode jordbruksmuligheter, men i Fig. 2: Haugalandet ser vi en nedgang i sysselsettingen de siste tiårene, mens det er en marginal økning i Sunnhordaland, jf. Fig 9. I Fig. 12: ser vi at Tysnes har hatt en markant økning i primærnæringen, relativt sett.

Universitets- og høgskolesektoren er liten i Rogaland, og den består for det første av Universitetet i Stavanger (UiS) og Høgskulen på Vestlandet (HVL) med campus Haugesund.

Haugaland Vekst, som er eigd/drevet av Haugalandsregionen er i spissen på å legge til rette for å etablere ny industri samt andre arbeidsplasser i regionen.

I helsesektoren er Stavanger universitetssykehus (SuS) sentralt.

Sunnhordland

Videre ønsker vi å se på den samme utviklingen, men denne gangen i Sunnhordlandsregionen.

Her viser figur 7 utviklingen til den totale summen av ansatte i Sunnhordlandsregionen fra 2008 til 2020. Sunnhordaland har i 2020 i underkant av 25 500 ansatte. Vi ser ut ifrå figuren at Sunnhordlandsregionen hadde ein markant vekst ifrå 2008 til 2014 med periodar med svak nedgang. Fra 2014 har det vært en reduksjon i totalt antall ansatte.

Figur 8 viser utviklingen av totalt ansatte i Sunnhordlandsregionen på kommunenivå i hele regionen fra 2008 til 2020. Denne figuren gir oss en oversikt, men er ikke heilt brukervennelig. Vi lager dermed en mer oversiktlig figur, jf. figur 9 & 10.

Vi ser her ut ifra figur 9 og 10 utviklingen for hver enkelt kommune i Sunnhordland totalt sett, og her ser vi mye tydligere utviklingen fra 2008 til 2020. En kan se her at Kvinnherad, Etne og Fitjar har hatt en reduksjon i totalt ansatte, mens Tysnes og Sveio har hatt ein kraftig vekst. En interessant bemerking er Stord i 2014 og Kvinnherad fra 2008 til 2017.

For å få et bedre oversikt over utviklingen i kommunen ønsker vi å se på de 6 mest relevante næringene i hver kommune.

Warning: Removed 1 row(s) containing missing values (geom_path).

Figur 11 og 12 viser de 6 mest relevante næringene i hver enkelt kommune i Sunnhordlandsregionen fra 2008 til 2020.

En ser ut ifra figur 11 at i de tre største kommunene, Bømlo, Kvinnherad og Stord så har de alle hatt en reduksjon i industrien, samtidig som de har hatt en vekst i helse- og sosialtjenester. Tysnes har vært stabil når det kommer til industri, men har sett ein markant vekst i primærnæringen (Jordbruk, Skogbruk og Fiske).

Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.

Det første bemerkelsesverdige i Sunnhordlandsregionen er den markante reduksjonen i industri i Stord kommune i 2014, samt Kvinnherad fra 2008. Dette stemmer overens med to hendelser. Den første er oljeknekken i 2014 som medførte at bl.a. Aker Stord AS som er avhengig av Olje-industrien måtte permitere.

Stord er en kommune som har mye offshore industri. I 2008/2009 så stengte Sør-Norge Aluminium “B-Hallen” som medførte 50% reduksjon i produksjon, og dermed ansatte. Interessant å bemerke at i Kvinnherad så er antall industriarbeidere redusert samtidig som antall ansatte i Helse- og Sosialetjenester økt. Bømlo har også sett en stabil reduksjon i ansatte innen industri, samt vekst i Helse- og Sosialetjenester frem til 2018.

Ser en på hele Sunnhordlandsregionen i sin helhet, så ser vi en svært tydelig vekst innen Helse- og Sosialetjenester, og reduksjon innen industri i hele regionen. Kvinnherad, Tysnes og Fitjar har opplevd ein markant vekst innen primærnæring. Kan det vere ein grunn til dette som burde diskuterast??

Fortsett Her (OA, KH)

Hardanger

Til slutt må vi gjere det samme med Hardanger

I henhold til oppgavens krav til betrakter vi Hardanger før 2019 som Ullensvang- og Odda kommune som to separerte kommuner. i 2020 så ble Ullensvang, Odda og Jondal slått sammen til Ullensvang. Dette forklarer den voldsomme økningen i sysselsetting i regionen ved tidspunktet for kommunesammenslåing.

Warning: Removed 1 row(s) containing missing values (geom_path).

Ullensvang kommune har stor kraftproduksjon og hovednæringen er industri. Majoriteten av kraftproduksjonen foregår i tidligere Odda. Odda er et ensidig industristed, men har også en maritim næring i tillegg. I figur 16 ser vi at industrinæringen utgjør en betraktelig større andel av sysselsettingen i her. Industrinæringen er også omfattet og bygg- og anleggsvirksomhet. På motsatt side er jordbruk, helse- og sosialtjenester dominerende i Ullensvang.

Generelt om Ullensvang kommune Ullensvang kommune (med Odda) har hatt en jevn og negativ befolkningsvekst i mange tiår. Det gjenspeiles ikke tydelig i våre modeller på grunn av skalaen som er brukt. I tillegg har vi ikke hensyntatt innvandrende arbeidere, eller midlertidige fraflyttede som for eksempel studenter.

2

[1] 0.1050339
[1] 0.1050339
Warning in syssel_bos$Eir_Er_industri/nasjonalt_bosted$Ein_En_Industri :
  longer object length is not a multiple of shorter object length
Warning in syssel_bos$Eir_Er_Jordbruk/nasjonalt_bosted$Ein_En_Jordbruk :
  longer object length is not a multiple of shorter object length
Warning in syssel_bos$Eir_Er_Undervisning/nasjonalt_bosted$Ein_En_Undervisning :
  longer object length is not a multiple of shorter object length
Warning in syssel_bos$Eir_Er_Helse/nasjonalt_bosted$Ein_En_Helse :
  longer object length is not a multiple of shorter object length

3 Sysselsetting I Ulike Næringer, Etter Bosted (Modeller Under Arbeid)

Haugalandet

<<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675

Sunnhordland

<<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675

Hardanger

<<<<<<< HEAD

=======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675 <<<<<<< HEAD =======

>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675

Oppgave 4

Pendling er et viktig begrep å bruke når vi snakker om regional utvikling. De ulike kommunene eller regionene kan ha ulike behov. De aller fleste kommuner har for lite arbeidsplasser i forhold til antall arbeidene. Det vil si at de fleste plasser er de avhengige av å pendle til andre plasser. Det kan være andre kommuner i samme region eller andre regioner. Det finnes også begrepet netto innpendling som betyr at noen kommuner eller regioner har flere arbeidsplasser tilgjengelige enn de har folk til å jobbe der innad i kommunen. Vi skal se på innpendling og utpendling som vil kunne fortelle oss i hvilken grad et sted er integrert i et større arbeidsmarked https://regionalanalyse.no/rapport/3004/1/4.

Vi har laget en tabell som tar for seg regionen Haugalandet. Her kan vi skille de forskjellige kommunene og se hvor andelen av innpendling og utpendling er størst eller minst.

Vi kan se på Karmøy som et eksempel når det gjelder innpendling og utpendling. I Karmøy kommune er det 11637 stykk som jobber i egen kommune, mens 5888 pendler til andre kommuner i regionen. Herav pendler 4916 personer til Haugesund, 9 pendler til Sauda, 31 pendler til Bokn, 712 til Tysvær, 218 til Vindafjord og 2 personer pendler til Utsira. Når det kommer til innpendling kan vi se at det til sammen er 3384 som pendler til Karmøy fra Hauglandsregionen. Den største andelen fra samme region som pendler til Karmøy er Haugesund. Vi kan se fra tabellen at det er 2586 stykker som pendler fra Haugesund til Karmøy.

På Utsira som har en mindre befolkning ser vi at 85 jobber i hjemkommunen, mens 9 stk pendler til andre kommune i regionen, henholdsvis til Haugesund, Tysvær og Karmøy.

På Haugalandet kan vi se

<<<<<<< HEAD
LS0tCnRpdGxlOiAiQXJiZWlkc2tyYXYgdsOlcmVuIDIwMjIiCmF1dGhvcjoKLSBLZXZpbiBIYQotIE9sYSBBbmRyZSBPbG9mc3NvbgotIEFubiBFbGlzYWJldGggSmFjb2JzZW4KLSBIZWlkaSBNYXJpZSBSb2xmc25lcwotIERhbmllbCBLYXJzdGFkCi0gSGVucmlldHRlIEhhbnNlbgotIFN1c2FubiBCaXJrZWxhbmQgU2l2ZXJ0c2VuCi0gVmlsZGUgSGF1Z2xhbmQKc3VidGl0bGU6IE1TQjEwNiwgQW52ZW5kdCBieS0gb2cgcmVnaW9uYWzDuGtvbm9taQpvdXRwdXQ6CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKbGFuZzogbm8tTkIKZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IHNlbnRlbmNlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeShyZWFkcikKICBsaWJyYXJ5KGdncGxvdDIpCiAgbGlicmFyeShrbml0cikKICBsaWJyYXJ5KHZpcmlkaXMpCiAgbGlicmFyeSh0aWR5dmVyc2UpCiAgfSkKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89RkFMU0UsIGluY2x1ZGUgPSBUUlVFKQpgYGAKCiMgUm9tbGlnZSBmb3Jza2plbGxlciBpIG7DpnJpbmdzc3RydWt0dXIsIHZpcmtuaW5nZXIgYXYgZWtzb2dlbmUgc2pva2sgaSBiYXNpc3N5c3NlbHNldHRpbmdlbiwgb2cgbG9rYWxlIGZvcnNramVsbGVyIEkgc3lzc2Vsc2V0dGluZ3N2ZWtzdC4KCkkgZGVubmUgb3BwZ2F2ZW4gdmlsIHZpIHNlIHDDpSBuw6ZyaW5nc3N0cnVrdHVyZXIgcMOlIEhhdWdhbGFuZGV0LCBTdW5uaG9yZGxhbmQgb2cgSGFyZGFuZ2VyLgoKUHJvYmxlbXN0aWxsaW5nZXIgb2cgYmVyZWduaW5nZXIgdmkgdmlsIHNlIG7DpnJtZXJlIHDDpQoKLSAgIEJlc2tyaXZlIHNpdHVhc2pvbmVuIHNsaWsgZGVuIGVyIGZvciAyMDIwLCBvZyBmb3IgdXR2aWtsaW5nZW4gb3ZlciB0aWQuCi0gICBTeXNzZWxzZXR0aW5nc3V0dmlrbGluZ2VuIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciBvZyBmb3IgcmVnaW9uZW4gc2FtbGV0LgotICAgQW5kZWxlbiBhdiBzeXNzZWxzZXR0aW5nZW4gaW5uZW5mb3IgZW5rZWx0bsOmcmluZ2VyLCBvZyBzYW1tZW5saWduZSBzaXR1YXNqb25lbiBvZyB1dHZpa2xpbmdlbiBmb3IgbG9rYWxlIGtvbW11bmVyIG9nIGxva2FsIHJlZ2lvbiBtZWQgZGV0IHNvbSBnamVsZGVyIGZvciBuYXNqb25lbiBzYW1sZXQuCi0gICBCZXJlZ25lIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciwgb2cgZm9yIHJlZ2lvbmVuKGUpIHNhbWxldC4KLSAgIEJlcmVnbmUgdWxpa2UgYWdncmVnZXJpbmdzbml2w6VlciBhdiBuw6ZyaW5nZXIgb2cgZ2VvZ3JhZmksIGlkZW50aWZpc2VyIG11bGlnZSBrbHluZ2VyIGJhc2VydCBww6UgdmVyZGllbmUgZm9yIGxva2FsaXNlcmluZ3Nrdm90aWVudGVuZS4KLSAgIEdqw7hyZSBlbiB2dXJkZXJpbmcgYXYgaHZvciBrb25zZW50cmVydC9zcHJlZHQgZW4gbsOmcmluZyBlciBmb3JkZWx0IG1lbGxvbSBrb21tdW5lbmUgaSByZWdpb25lbiwgYmFzZXJ0IHDDpSBiZXJlZ25pbmdlciBhdiBkZW4gcm9tbGlnZSBHaW5pLWluZGVrc2VuLgotICAgVnVyZGVyZSBvbSBzYW1tZW5saWduaW5nc2dydW5ubGFnZXQgYsO4ciB2w6ZyZSBzYW1sZXQgc3lzc2Vsc2V0dGluZyBpIHJlZ2lvbmVuLCBlbGxlciBzYW1sZXQgc3lzc2Vsc2V0dGluZyBhdiBuYXNqb25lbiwgb2cgZmlubmUgdXQgaHZpbGtlbiByb2xsZSBkZXQgc3BpbGxlciBvbSBlbiBicnVrZXIgcmVnaW9uYWxlIGVsbGVyIG5hc2pvbmFsZSBhbnNsYWcgZm9yIHNhbWxldCBzeXNzZWxzZXR0aW5nLgotICAgRmlubmUgdXQgb20gbsOmcmluZ3NzdHJ1a3R1cmVuIGkgcmVnaW9uZW4gaGFyIGJsaXR0IG1lciBlbGxlciBtaW5kcmUgZGl2ZXJzaWZpc2VydCwgbWFuZ2ZvbGRpZywgb3ZlciB0aWQuCi0gICBCZXJlZ25lIGVuIHJlZ2lvbmFsIG1hbmdmb2xkLWluZGVrcyBvZyBmaW5uZSB1dCBodm9yZGFuIHZlcmRpZW5lIHDDpSBlbiBzbGlrIGluZGVrcyBlciBlbmRyZXQgb3ZlciB0aWQuCi0gICBWdXJkZXJlIG9tIHN5c3NlbHNldHRpbmdzYW5kZWxlbmUgc2thbCBzYW1tZW5saWduZXMgbWVkIG5hc2pvbmFsZSBlbGxlciByZWdpb25hbGUgYW5kZWxlciBmb3IgZGUgdWxpa2UgbsOmcmluZ2VuZQotICAgR2plbnRhIGJlcmVnbmluZ2VyIGZvciBhbmRlbGVyIGF2IGFyYmVpZHN0YWtlcmUgaSB1bGlrZSBuw6ZyaW5nZXIsIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyLCBkZW4gcm9tbGlnZSBHaW5pLSBrb2VmZmlzaWVudGVuIG9nIG3DpWxldCBmb3IgbWFuZ2ZvbGQgYXYgbsOmcmluZ2VyLCBtZWQgdXRnYW5nc3B1bmt0IGkgZGF0YSBzcGVzaWZpc2VydCBldHRlciBhcmJlaWRzdGFrZXJuZXMgYm9zdGVkLgotICAgU2FtbWVubGlnbmUgcmVzdWx0YXRlbmUgZm9yIGRhdGEgZXR0ZXIgYXJiZWlkc3N0ZWQsIG9nIGtvbW1lbnRlciBodmlsa2VuIGluZm9ybWFzam9uIHJlc3VsdGF0ZW5lIGdpciBvbSByb21saWcgbW9iaWxpdGV0IGkgYXJiZWlkc21hcmtlZGV0LgotICAgR2kgZW4ga29ydCBvdmVyc2lrdCBvdmVyIHBlbmRsZXJzdHLDuG1tZXIgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuCi0gICBCZXJlZ25lIG9nIHByZXNlbnRlcmUgYW5kZWxlciBhdiBhcmJlaWRzdGFrZXJlIG1lZCBib3N0ZWQgaSBlbiBrb21tdW5lIHNvbSBoYXIgYXJiZWlkc3N0ZWQgaSBhbmRyZSBrb21tdW5lciwgb2cgZ2rDuHIgZGV0IHNhbW1lIGZvciBhbmRlbGVuIGF2IGpvYmJlbmUgaSBlbiBrb21tdW5lIHNvbSBlciBiZXNhdHQgYXYgYXJiZWlkc3Rha2VyZSBmcmEgYW5kcmUga29tbXVuZXIuCi0gICBEaXNrdXRlcmUgZm9yc2tqZWxsZXIgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuLCBvZyBkcsO4ZnQgdXR2aWtsaW5nZW4gb3ZlciB0aWQgZm9yIHVsaWtlIGtvbW11bmVyCi0gICBCZXJlZ25lIG9nIHByZXNlbnRlcmUgYW5kZWxlbiBhdiBhcmJlaWRzdGFrZXJlIHNvbSBib3Igb2cgam9iYmVyIGlubmVuZm9yIHNhbW1lIGtvbW11bmUuIFNlIG9tIGRldCBlciBzeXN0ZW1hdGlza2UgZm9yc2tqZWxsZXIgc2V0dCBpIGZvcmhvbGQgdGlsIHNlbnRyYWxpdGV0IG9nIHRpbGdqZW5nZWxpZ2hldCBpIGRldCBsb2thbGUgYXJiZWlkc21hcmtlZGV0LiBPZyBvbSBkZXQgZXIgYmVzdGVtdGUgdHJlbmRlciBpIHV0dmlrbGluZ2VuIGZvciB1bGlrZSBrb21tdW5lci4KLSAgIEJydWtlIGJlcmVnbmluZ2VuZSBhdiBsb2thbGlzZXJpbmdrdm90aWVudGVyIHRpbCDDpSBkZWxlIG7DpnJpbmdlbmUgaW5uIGkgbG9rYWwtIG9nIGJhc2lzbsOmcmluZ2VyCi0gICBGb3JtdWxlcmUgZW4gw7hrb25vbWlzayBiYXNlbW9kZWxsIG9nIGJlcmVnbmUgw7hrb25vbWlza2UgYmFzZW11bGlwbGlrYXRvcmVyIGZvciBlbmtlbHRrb21tdW5lciBvZyByZWdpb24oZXIpLgotICAgVnVyZGVyZSBsb2thbGUgdmlya25pbmdlciBhdiBhbHRlcm5hdGl2ZSBsb2thbGlzZXJpbmdlciBpIE9kZGEsIEh1c25lcyBvZyBMZWlydmlrCi0gICBEcsO4ZnRlIHZpcmtuaW5nZXIgYXYgZXQgc2xpa3QgcG9zaXRpdnQgZWtzb2dlbnQgc2pva2sgZm9yIGRlbiBsb2thbGUgw7hrb25vbWllbiBnamVubm9tIGJydWsgYXYgZW4gYmFzZW1vZGVsbAotICAgRmlubmUgdXQgaHZvcmRhbiB2aXJrbmluZ2VuZSBldmVudHVlbHQgc3ByZXMgdGlsIGFuZHJlIGtvbW11bmVyIGkgcmVnaW9uZW4gb2cgaHZvcmRhbiBlbiBrYW4gYnJ1a2UgZGF0YSBmb3IgcGVuZGxlc3Ryw7htbWVyIHRpbCDDpSBwcmVkaWtlcmUgdmlya25pbmdlciBww6Ugc3lzc2Vsc2V0dGluZ2VuIGkgdWxpa2Uga29tbXVuZXIuCi0gICBTYW1tZW5saWduZSBkaXNzZSBwcmVkaWtzam9uZW5lIG1lZCBkZSB2aSBmw6VyIG7DpXIgdmkgZ2plbm5vbWbDuHJlciBhbmFseXNlbiBww6UgcmVnaW9uYWx0IG5pdsOlLgotICAgR2kgZW4gc2hpZnQtc2hhcmUgYW5hbHlzZSBpIGVuIGRpc2t1c2pvbiBhdiBmb3Jza2plbGxlciBpIHZla3N0IGZvciBla3NlbXBlbCBtZWxsb20gaW5kcmUsIG1pZHRyZSBvZyB5dHJlIGRlbGVyIGF2IHJlZ2lvbmVuLCBlbGxlciBldmVudHVlbHQgb21yw6VkZXIva29tbXVuZXIgc29tIGhhciBoYXR0IHN0ZXJrIG9nIHN2YWsgYmVmb2xrbmluZ3N1dHZpa2xpbmcuCgojIyBPdmVyc2lrdCBvdmVyIGJlZm9sa25pbmdlbmUgaSByZWdpb25lbmUKCiMjIyBIYXVnYWxhbmRldApIYXVnYWxhbmRldCBiZXN0w6VyIGF2IGtvbW11bmVuZSBCb2tuICg4NTIpLCBIYXVnZXN1bmQgKDM3MzU3KSwgS2FybcO4eSAoNDIxODYpLCBTYXVkYSAoNDU5NSksIFR5c3bDpnIoMTEwNjUpLCBVdHNpcmEoMTk4KSBvZyBWaW5kYWZqb3JkKDg3MTQpLiB0aWxzYW1tZW4gYm9yIGRldCAxMDQ5NjcgcGVyc29uZXIgaSBkZW5uZSByZWdpb25lbi4gaSB0aWRzcGVyaW9kZW4gdmkgaGFyIGhlbnRldCBpbm4gZGF0YSBoYXIgZGV0IHZlcnQga29tbXVuZXNhbW1lbnNsw6VpbmcgaSBkZW5uZSByZWdpb25lbi4gRGEgYmxlIMOYbGVuIG9nIHZpbmRhZmpvcmQgc2zDpXR0IGkgc2FtbWVuIHRpbCBlbiBrb21tdW5lIChodm9yZGFuIGhhciB2aSB0YXR0IGhlbnN5biB0aWwgZGV0dGU/Pz8pCgojIyMgU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcKU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcgYmVzdMOlciBhdiBrb21tdW5lbmUgQsO4bWxvKDExOTU3KSwgRXRuZSg0MDYyKSwgRml0amFyKDMxODkpLCBLdmlubmhlcmFkKDEzMDcxKSwgU3RvcmQoMTg3NTkpLCBTdmVpbyg1NzY2KSwgVHlzbmVzKDI4NjkpIG9nIFVsbGVuc3ZhbmcoMTEwNDgpLiBUaWxzYW1tZW4gYm9yIGRldCA3MDcyMSBwZXJzb25lciBpIGRlbm5lIHJlZ2lvbmVuLgoKVGFsbGVuZSBlciBoZW50ZXQgZnJhIFNTQiAwOS4wMS4yMSAoaHR0cHM6Ly93d3cuc3NiLm5vL3N0YXRiYW5rL3RhYmxlLzAxMjIzL3RhYmxlVmlld0xheW91dDEvKSBnamVsZGVyIGZvciA0IGt2YXJ0YWwgMjAyMC4KCmBgYHtyIGNzdl9maWxlcn0Kc3lzc2VsX2FyYiA8LSByZWFkX2NzdigiRGF0YS9zeXNzZWxfYXJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmhsZF9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvaGxkX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzdW5fYXJiIDwtIHJlYWRfY3N2KCJEYXRhL3N1bl9hcmIuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGFyX2FyYiA8LSByZWFkX2NzdigiRGF0YS9oYXJfYXJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCnN5c3NlbF9ib3MgPC0gcmVhZF9jc3YoIkRhdGEvc3lzc2VsX2Jvcy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpobGRfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL2hsZF9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKc3VuX2JvcyA8LSByZWFkX2NzdigiRGF0YS9zdW5fYm9zLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmhhcl9ib3MgPC0gcmVhZF9jc3YoIkRhdGEvaGFyX2Jvcy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpQZW5kbGluZyA8LSByZWFkX2NzdigiRGF0YS9QZW5kbGluZy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpoZ2xfUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvaGdsX1BlbmRsaW5nLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCnN1bl9QZW5kbGluZyA8LSByZWFkX2NzdigiRGF0YS9zdW5fUGVuZGxpbmcuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKYGBgCgojIDEgU3lzc2Vsc2V0dGluZyBJIFVsaWtlIE7DpnJpbmdlciwgRXR0ZXIgQXJiZWlkc3N0ZWQKCiMjIEhhdWdhbGFuZGV0CgpGw7hyc3RlIHJlZ2lvbmVuIHZpIHZlbGdlciDDpSBzZSBww6UgZXIgSGF1Z2FsYW5kZXQuIEhlciDDuG5za2VyIHZpIMOlIHNlIHDDpSB1dHZpa2xpbmdlbiBmcmEgMjAwOCB0aWwgMjAyMCwgYXYgYW50YWxsIGFuc2F0dGUgaSBzaW4gaGVsaGV0IGkgcmVnaW9uZW4sIHNhbXQgZGUgNiBtZXN0IHJlbGV2YW50ZSBuw6ZyaW5nZW5lLgoKYGBge3IgQXJiZWlkc3N0ZWRfSGF1Z2FsYW5kZXRfMX0KaGxkX2FyYiAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDE6IEhhdWdhbGFuZGV0IikrCiAgeWxhYigiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKSSAyMDIwIGVyIGRldCBpIHVuZGVya2FudCBhdiA1MCAwMDAgYW5zYXR0ZSBpIGFsbGUgbsOmcmluZ2VyIHDDpSBIYXVnYWxhbmRldC4gQXYgRmlnLiAxIHNlciB2aSBhdCBIYXVnYWxhbmRldCBmaWtrIGVuIG5lZGdhbmcgaSBhbnRhbGwgYW5zYXR0ZSBpIDIwMTUgb2cgMjAxNi4gSSAyMDE3IG9nIDIwMTggYmxlIGRldCB2ZWtzdCwgZnJlbSB0aWwgZGV0IHNudWRkZSBpIDIwMTkgaWdqZW4uCgpgYGB7ciBBcmJlaWRzc3RlZF9IYXVnYWxhbmRldF8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYygxMTA2LCAxMTM1LCAxMTQ1LCAxMTQ2LCAxMTQ5LCAxMTUxLCAxMTYwKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBgQWxsZSBOw6ZyaW5nZXJgLCAoYW5nbGU9MCkpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDI6IEhhdWdhbGFuZGV0IiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKSSBGaWcuIDIgc2VyIHZpIGF0IGZsZXJlIGF2IGtvbW11bmVuZSBww6UgSGF1Z2FsYW5kZXQgaGFyIGhhdHQgbGl0ZW4gYXJiZWlkc3BsYXNzdmVrc3QsIG1lZCB1bm50YWsgYXYgVHlzdsOmciwgVmluZGFmam9yZCBvZyBLYXJtw7h5IGkgZGVuIHNpc3RlIHRpw6Vyc3BlcmlvZGVuLiBWaSBzZXIgZGV0dGUgbWVyIHR5ZGVsaWcgcMOlIGZpZy4gMyBvZyA0LgoKYGBge3IgaGxkX2FyYl9sb25nfQpobGRfYXJiX2xvbmcgPC0gc3lzc2VsX2FyYiAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfM19TdMO4cnN0ZV9BcmJlaWRzdGVkfQpobGRfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkhhdWdlc3VuZCIsICJLYXJtw7h5IiwgIlZpbmRhZmpvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMzogSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAyKSkgKyAKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9IYXVnYWxhbmRldF80X01pbnN0ZV9BcmJlaWRzdGVkfQpobGRfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gNDogSGF1Z2FsYW5kZXQ6IEJva24sIFNhdWRhIFR5c3bDpnIgb2cgVXRzaXJhIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAyKSkgKyAKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpCmBgYAoKRmlndXIgMyBvZyA0IHZpc2VyIHV0dmlrbGluZ2VuIGF2IGRldCB0b3RhbGUgYW50YWxsIGFuc2F0dGUgaSBhbGxlIG7DpnJpbmdlciBww6Uga29tbXVuYWx0IG5pdsOlLCBpbm5lbmZvciBIYXVnYWxhbmQtcmVnaW9uZW4uCgpJIGRpc3NlIGZpZ3VyZW5lLCBzw6Ugc2VyIHZpIHR5ZGVsaWcgYXQgSGF1Z2VzdW5kIGhhciBoYXR0IHJlZHVrc2pvbiBpIGFudGFsbCBhbnNhdHRlIHRvdGFsdCBzZXR0LCBtZW5zIEthcm3DuHksIFZpbmRhZmpvcmQgb2cgVHlzdsOmciBoYXIgaGF0dCBlbiBtYXJrYW50IHZla3N0IGRlIHNpc3RlIHRpIMOlcmVuZS4gU2lkZW4gSGF1Z2VzdW5kIGhhciBmbGVzdCBhcmJlaWRzcGxhc3NlciBiZXR5ciB1dHZpa2xpbmdlbiBpIEhhdWdlc3VuZCBteWUgZm9yIGRlIHNhbWxlZGUgdGFsbGVuZS4KCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19IYXVnZWxhbmRldF8zX1N0w7hyc3RlX0FyYmVpZHNzdGVkfQpobGRfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkhhdWdlc3VuZCIsICJLYXJtw7h5IiwgIlZpbmRhZmpvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA1OiBIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzRfTWluc3RlX0FyYmVpZHNzdGVkfQpobGRfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA2OiBIYXVnYWxhbmRldDogQm9rbiwgU2F1ZGEsIFR5c3bDpnIgb2cgVXRzaXJhIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkZpZ3VyIDUgb2cgNiB2aXNlciB1dHZpa2xpbmdlbiBhdiBkZSA2IG1lc3QgcmVsZXZhbnRlIG7DpnJpbmdlbmUgaSBIYXVnYWxhbmRzcmVnaW9uZW4gcMOlIGtvbW11bmUgbml2w6UuCgpWaSBzZXIgaSBkZSB0cmUgc3TDuHJzdGUga29tbXVuZW5lLCBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCB1dGdqw7hyIG7DpnJpbmdlbmUgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciBvZyBJbmR1c3RyaSBkZSBzdMO4cnN0ZS4gSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciBoYXIgdm9rc3QgamV2bnQgb2cgdHJ1dHQgZGUgc2lzdGUgdGnDpXJlbmUsIG1lbnMgYW50YWxsIGFuc2F0dGUgaSBpbmR1c3RyaW7DpnJpbmdlbiBoYXIgdmFyaWVydCBmcmEga29tbXVuZSB0aWwga29tbXVuZS4gSSBIYXVnYWxhbmRldCB1dGdqw7hyIHByaW3DpnJuw6ZyaW5nZXIgKGpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSkgZW4gc3TDuHJyZSBhbmRlbCwgZW5uIGhvcyBLYXJtw7h5IG9nIEhhdWdlc3VuZCBodm9yIHByaW3DpnJuw6ZyaW5nZW5lIGt1biB1dGdqw7hyZSBlbiBsaXRlbiBhbmRlbC4KCiMjIyBTeXNzZWxzZXR0aW5nc3V0dmlrbGluZ2VuIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciBvZyBmb3IgcmVnaW9uZW4gc2FtbGV0LiAKCkRldCBlciByZWxhdGl2dCBzdG9yZSBrb21tdW5ldmlzZSBmb3Jza2plbGxlciBpIG7DpnJpbmdzc3RydWt0dXJlbi4KUm9nYWxhbmQgaGFyIGVuIGZvcmhvbGRzdmlzIGVuc2lkaWcgbsOmcmluZ3NzdHJ1a3R1ciwgb2xqZSBvZyBnYXNzIGVyIGRvbWluZXJlbmRlLiBGeWxrZXQgZXIgc3V2ZXJlbnQgZG9taW5lcmVuZGUgZm9yIGZvc3NpbCBlbmVyZ2kuIERlIGhhciBmb3Igw7h2cmlnIGRlIHNpc3RlIMOlcmVuZSBzYXRzZXQgcMOlIGV0IGVuIG1lciBkaWZmZXJlbnNpZXJ0IG7DpnJpbmdzc3RydWt0dXIgb2cgbsOmcmluZ3NsaXYgdmVkIMOlIHNhdHNlIHDDpSBoZWxzZSwgSUtUIG9nIGZvcm55YmFyIGVuZXJnaS4KCkkgdsOlcmUgbW9kZWxsZXIsIGVyIHNhdHNpbmdlbiBww6UgaGVsc2UgZGVuIG1lc3QgdHlkZWxpZ2UuIEF2IHJlbnQgdGVrbmlza2UgZ3J1bm5lciBlciBkZXQgdmFuc2tlbGlnIMOlIHNlIHV0dmlrbGluZ2VuIGkgZW5rZWx0ZSBuw6ZyaW5nZXIgc29tIHV0Z2rDuHIgc23DpSBhbmRlbGVyLCBww6UgZ3J1bm4gYXYgc2thbGFlbiBzb20gZXIgYmVueXR0ZXQuIFRpbCB0cm9zcyBmb3IgZGV0dGUsIGthbiBtYW4gc2UgYXQgbsOmcmluZ3NzdHJ1a3R1cmVuIGkgcmVnaW9uZW4gc2FtbGV0IGdlbmVyZWx0IHNldHQgaGFyIGVuZHJldCBzZWcgbGl0ZS4KClJvZ2FsYW5kIGhhciBnb2RlIGpvcmRicnVrc211bGlnaGV0ZXIsIG1lbiBpIEZpZy4gMjogSGF1Z2FsYW5kZXQgc2VyIHZpIGVuIG5lZGdhbmcgaSBzeXNzZWxzZXR0aW5nZW4gZGUgc2lzdGUgdGnDpXJlbmUsIG1lbnMgZGV0IGVyIGVuIG1hcmdpbmFsIMO4a25pbmcgaSBTdW5uaG9yZGFsYW5kLCBqZi4gRmlnIDkuIEkgRmlnLiAxMjogc2VyIHZpIGF0IFR5c25lcyBoYXIgaGF0dCBlbiBtYXJrYW50IMO4a25pbmcgaSBwcmltw6ZybsOmcmluZ2VuLCByZWxhdGl2dCBzZXR0LgoKVW5pdmVyc2l0ZXRzLSBvZyBow7hnc2tvbGVzZWt0b3JlbiBlciBsaXRlbiBpIFJvZ2FsYW5kLCBvZyBkZW4gYmVzdMOlciBmb3IgZGV0IGbDuHJzdGUgYXYgVW5pdmVyc2l0ZXRldCBpIFN0YXZhbmdlciAoVWlTKSBvZyBIw7hnc2t1bGVuIHDDpSBWZXN0bGFuZGV0IChIVkwpIG1lZCBjYW1wdXMgSGF1Z2VzdW5kLgoKSGF1Z2FsYW5kIFZla3N0LCBzb20gZXIgZWlnZC9kcmV2ZXQgYXYgSGF1Z2FsYW5kc3JlZ2lvbmVuIGVyIGkgc3Bpc3NlbiBww6Ugw6UgbGVnZ2UgdGlsIHJldHRlIGZvciDDpSBldGFibGVyZSBueSBpbmR1c3RyaSBzYW10IGFuZHJlIGFyYmVpZHNwbGFzc2VyIGkgcmVnaW9uZW4uCgpJIGhlbHNlc2VrdG9yZW4gZXIgU3RhdmFuZ2VyIHVuaXZlcnNpdGV0c3N5a2VodXMgKFN1Uykgc2VudHJhbHQuCgojIyBTdW5uaG9yZGxhbmQKClZpZGVyZSDDuG5za2VyIHZpIMOlIHNlIHDDpSBkZW4gc2FtbWUgdXR2aWtsaW5nZW4sIG1lbiBkZW5uZSBnYW5nZW4gaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4uCgpgYGB7ciBBcmJlaWRzc3RlZF9TdW5uaG9yZGxhbmRfMX0Kc3VuX2FyYiAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDc6IFN1bm5ob3JkYWxhbmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCkhlciB2aXNlciBmaWd1ciA3IHV0dmlrbGluZ2VuIHRpbCBkZW4gdG90YWxlIHN1bW1lbiBhdiBhbnNhdHRlIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGZyYSAyMDA4IHRpbCAyMDIwLiBTdW5uaG9yZGFsYW5kIGhhciBpIDIwMjAgaSB1bmRlcmthbnQgYXYgMjUgNTAwIGFuc2F0dGUuIFZpIHNlciB1dCBpZnLDpSBmaWd1cmVuIGF0IFN1bm5ob3JkbGFuZHNyZWdpb25lbiBoYWRkZSBlaW4gbWFya2FudCB2ZWtzdCBpZnLDpSAyMDA4IHRpbCAyMDE0IG1lZCBwZXJpb2RhciBtZWQgc3ZhayBuZWRnYW5nLiBGcmEgMjAxNCBoYXIgZGV0IHbDpnJ0IGVuIHJlZHVrc2pvbiBpIHRvdGFsdCBhbnRhbGwgYW5zYXR0ZS4KCmBgYHtyIEFyYmVpZHNzdGVkX1N1bm5ob3JkbGFuZF8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjExLCA0NjEyLCA0NjEzLCA0NjE0LCA0NjE1LCA0NjE2LCA0NjE3KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gODogU3VubmhvcmRsYW5kIiwgeCA9ICLDhXIiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgOCB2aXNlciB1dHZpa2xpbmdlbiBhdiB0b3RhbHQgYW5zYXR0ZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBww6Uga29tbXVuZW5pdsOlIGkgaGVsZSByZWdpb25lbiBmcmEgMjAwOCB0aWwgMjAyMC4gRGVubmUgZmlndXJlbiBnaXIgb3NzIGVuIG92ZXJzaWt0LCBtZW4gZXIgaWtrZSBoZWlsdCBicnVrZXJ2ZW5uZWxpZy4gVmkgbGFnZXIgZGVybWVkIGVuIG1lciBvdmVyc2lrdGxpZyBmaWd1ciwgamYuIGZpZ3VyIDkgJiAxMC4KCmBgYHtyIHN1bl9hcmJfbG9uZ30Kc3VuX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX1N1bm5ob3JkbGFuZF8zX1N0w7hyc3RlX0FyYmVpZHN0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIkt2aW5uaGVyYWQiLCAiU3RvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gOTogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX1N1bm5ob3JkbGFuZF80X01pbnN0ZV9BcmJlaWRzdGVkfQpzdW5fYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiRml0amFyIiwgIlN2ZWlvIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxMDogU3VubmhvcmRsYW5kOiBFdG5lLCBGaXRoYXIsIFN2ZWlvIG9nIFR5c25lcyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKClZpIHNlciBoZXIgdXQgaWZyYSBmaWd1ciA5IG9nIDEwIHV0dmlrbGluZ2VuIGZvciBodmVyIGVua2VsdCBrb21tdW5lIGkgU3VubmhvcmRsYW5kIHRvdGFsdCBzZXR0LCBvZyBoZXIgc2VyIHZpIG15ZSB0eWRsaWdlcmUgdXR2aWtsaW5nZW4gZnJhIDIwMDggdGlsIDIwMjAuIEVuIGthbiBzZSBoZXIgYXQgS3Zpbm5oZXJhZCwgRXRuZSBvZyBGaXRqYXIgaGFyIGhhdHQgZW4gcmVkdWtzam9uIGkgdG90YWx0IGFuc2F0dGUsIG1lbnMgVHlzbmVzIG9nIFN2ZWlvIGhhciBoYXR0IGVpbiBrcmFmdGlnIHZla3N0LiBFbiBpbnRlcmVzc2FudCBiZW1lcmtpbmcgZXIgU3RvcmQgaSAyMDE0IG9nIEt2aW5uaGVyYWQgZnJhIDIwMDggdGlsIDIwMTcuCgpGb3Igw6UgZsOlIGV0IGJlZHJlIG92ZXJzaWt0IG92ZXIgdXR2aWtsaW5nZW4gaSBrb21tdW5lbiDDuG5za2VyIHZpIMOlIHNlIHDDpSBkZSA2IG1lc3QgcmVsZXZhbnRlIG7DpnJpbmdlbmUgaSBodmVyIGtvbW11bmUuCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQXJiZWlkc3N0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIlN0b3JkIiwgIkt2aW5uaGVyYWQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxMTogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzRfTWluc3RlX0FyYmVpZHNzdGVkfQpzdW5fYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiU3ZlaW8iLCAiRml0amFyIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDEyOiBTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGphciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkZpZ3VyIDExIG9nIDEyIHZpc2VyIGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIGh2ZXIgZW5rZWx0IGtvbW11bmUgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZnJhIDIwMDggdGlsIDIwMjAuCgpFbiBzZXIgdXQgaWZyYSBmaWd1ciAxMSBhdCBpIGRlIHRyZSBzdMO4cnN0ZSBrb21tdW5lbmUsICpCw7htbG8qLCAqS3Zpbm5oZXJhZCogb2cgKlN0b3JkKiBzw6UgaGFyIGRlIGFsbGUgaGF0dCBlbiByZWR1a3Nqb24gaSBpbmR1c3RyaWVuLCBzYW10aWRpZyBzb20gZGUgaGFyIGhhdHQgZW4gdmVrc3QgaSBoZWxzZS0gb2cgc29zaWFsdGplbmVzdGVyLiBUeXNuZXMgaGFyIHbDpnJ0IHN0YWJpbCBuw6VyIGRldCBrb21tZXIgdGlsIGluZHVzdHJpLCBtZW4gaGFyIHNldHQgZWluIG1hcmthbnQgdmVrc3QgaSBwcmltw6ZybsOmcmluZ2VuIChKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2UpLgoKIyMjIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCgpEZXQgZsO4cnN0ZSBiZW1lcmtlbHNlc3ZlcmRpZ2UgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZXIgZGVuIG1hcmthbnRlIHJlZHVrc2pvbmVuIGkgaW5kdXN0cmkgaSBTdG9yZCBrb21tdW5lIGkgMjAxNCwgc2FtdCBLdmlubmhlcmFkIGZyYSAyMDA4LiBEZXR0ZSBzdGVtbWVyIG92ZXJlbnMgbWVkIHRvIGhlbmRlbHNlci4gRGVuIGbDuHJzdGUgZXIgb2xqZWtuZWtrZW4gaSAyMDE0IHNvbSBtZWRmw7hydGUgYXQgYmwuYS4gQWtlciBTdG9yZCBBUyBzb20gZXIgYXZoZW5naWcgYXYgT2xqZS1pbmR1c3RyaWVuIG3DpXR0ZSBwZXJtaXRlcmUuCgpTdG9yZCBlciBlbiBrb21tdW5lIHNvbSBoYXIgbXllIG9mZnNob3JlIGluZHVzdHJpLiBJIDIwMDgvMjAwOSBzw6Ugc3Rlbmd0ZSBTw7hyLU5vcmdlIEFsdW1pbml1bSAiQi1IYWxsZW4iIHNvbSBtZWRmw7hydGUgNTAlIHJlZHVrc2pvbiBpIHByb2R1a3Nqb24sIG9nIGRlcm1lZCBhbnNhdHRlLiBJbnRlcmVzc2FudCDDpSBiZW1lcmtlIGF0IGkgS3Zpbm5oZXJhZCBzw6UgZXIgYW50YWxsIGluZHVzdHJpYXJiZWlkZXJlIHJlZHVzZXJ0IHNhbXRpZGlnIHNvbSBhbnRhbGwgYW5zYXR0ZSBpIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyIMO4a3QuIELDuG1sbyBoYXIgb2dzw6Ugc2V0dCBlbiBzdGFiaWwgcmVkdWtzam9uIGkgYW5zYXR0ZSBpbm5lbiBpbmR1c3RyaSwgc2FtdCB2ZWtzdCBpIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyIGZyZW0gdGlsIDIwMTguCgpTZXIgZW4gcMOlIGhlbGUgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGkgc2luIGhlbGhldCwgc8OlIHNlciB2aSBlbiBzdsOmcnQgdHlkZWxpZyB2ZWtzdCBpbm5lbiBIZWxzZS0gb2cgU29zaWFsZXRqZW5lc3Rlciwgb2cgcmVkdWtzam9uIGlubmVuIGluZHVzdHJpIGkgaGVsZSByZWdpb25lbi4gS3Zpbm5oZXJhZCwgVHlzbmVzIG9nIEZpdGphciBoYXIgb3BwbGV2ZCBlaW4gbWFya2FudCB2ZWtzdCBpbm5lbiBwcmltw6ZybsOmcmluZy4gKipLYW4gZGV0IHZlcmUgZWluIGdydW5uIHRpbCBkZXR0ZSBzb20gYnVyZGUgZGlza3V0ZXJhc3Q/PyoqCgojIEZvcnRzZXR0IEhlciAoT0EsIEtIKQoKIyMgSGFyZGFuZ2VyCgpUaWwgc2x1dHQgbcOlIHZpIGdqZXJlIGRldCBzYW1tZSBtZWQgKkhhcmRhbmdlcioKCkkgaGVuaG9sZCB0aWwgb3BwZ2F2ZW5zIGtyYXYgdGlsIGJldHJha3RlciB2aSAqSGFyZGFuZ2VyKiBmw7hyIDIwMTkgc29tIFVsbGVuc3ZhbmctIG9nIE9kZGEga29tbXVuZSBzb20gdG8gc2VwYXJlcnRlIGtvbW11bmVyLiBpIDIwMjAgc8OlIGJsZSBVbGxlbnN2YW5nLCBPZGRhIG9nIEpvbmRhbCBzbMOldHQgc2FtbWVuIHRpbCBVbGxlbnN2YW5nLiBEZXR0ZSBmb3JrbGFyZXIgZGVuIHZvbGRzb21tZSDDuGtuaW5nZW4gaSBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uZW4gdmVkIHRpZHNwdW5rdGV0IGZvciBrb21tdW5lc2FtbWVuc2zDpWluZy4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8xfQpoYXJfYXJiICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gw4VyLCB5ID0gVG90YWx0KSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTM6IEhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKQpgYGAKCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMTQ6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhhcl9hcmJfbG9uZ30KaGFyX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhcmRhbmdlcl9BcmJlaWRzdGVkfQpoYXJfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNTogSGFyZGFuZ2VyOiBPZGRhIG9nIFVsbGVuc3ZhbmciLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhcmRhbmdlcl9BcmJlaWRzc3RlZH0KaGFyX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCiMgMiAKCmBgYHtyfQpoYXUyMCA8LSBzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoYWFyID09ICIyMDIwIiwga25hdm4gPT0gIkhhdWdlc3VuZCIpCmBgYAoKYGBge3J9CjE5MDUvMTgxMzcKYGBgCgpgYGB7cn0KKGhhdTIwJEluZHVzdHJpL2hhdTIwJGBBbGxlIE7DpnJpbmdlcmApCmBgYAoKYGBge3J9CnN5c3NlbF9ib3MgPC0gc3lzc2VsX2JvcyAlPiUgCiAgbXV0YXRlKEVpcl9Fcl9pbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApCmBgYAoKCmBgYHtyfQpsaWJyYXJ5KHJlYWR4bCkKbmFzam9uYWx0X2Jvc3RlZCA8LSByZWFkX2V4Y2VsKCJEYXRhL25hc2pvbmFsdF9ib3N0ZWQueGxzeCIpCmBgYAoKYGBge3J9Cm5hc2pvbmFsdF9ib3N0ZWQgPC0gbmFzam9uYWx0X2Jvc3RlZCAlPiUgCiAgbXV0YXRlKEVpbl9Fbl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpbl9Fbl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpbl9Fbl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWluX0VuX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApCmBgYAoKYGBge3J9CkxRaW5kdXN0cmkgPC0gYXNfdGliYmxlKHN5c3NlbF9ib3MkRWlyX0VyX2luZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0luZHVzdHJpKQpMUWpvcmRicnVrIDwtIGFzX3RpYmJsZShzeXNzZWxfYm9zJEVpcl9Fcl9Kb3JkYnJ1ay9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9Kb3JkYnJ1aykKTFF1bmRlcnZpc25pbmcgPC0gYXNfdGliYmxlKHN5c3NlbF9ib3MkRWlyX0VyX1VuZGVydmlzbmluZy9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9VbmRlcnZpc25pbmcpCkxRaGVsc2UgPC0gYXNfdGliYmxlKHN5c3NlbF9ib3MkRWlyX0VyX0hlbHNlL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0hlbHNlKQpgYGAKCmBgYHtyfQpzeXNzZWxfYm9zIDwtIHN5c3NlbF9ib3MgJT4lIAogIG11dGF0ZShMUWluZHVzdHJpID0gTFFpbmR1c3RyaSR2YWx1ZSwKICAgICAgICAgTFFqb3JkYnJ1ayA9IExRam9yZGJydWskdmFsdWUsCiAgICAgICAgIExRdW5kZXJ2aXNuaW5nID0gTFF1bmRlcnZpc25pbmckdmFsdWUsCiAgICAgICAgIExRaGVsc2UgPSBMUWhlbHNlJHZhbHVlKQpgYGAKCgpgYGB7cn0KTFFib3MgPC0gc3lzc2VsX2JvcyAlPiUgCiAgc2VsZWN0KGFhciwga25hdm4sIExRaW5kdXN0cmksIExRam9yZGJydWssIExRdW5kZXJ2aXNuaW5nLCBMUWhlbHNlKQpgYGAKCgojIDMgU3lzc2Vsc2V0dGluZyBJIFVsaWtlIE7DpnJpbmdlciwgRXR0ZXIgQm9zdGVkIChNb2RlbGxlciBVbmRlciBBcmJlaWQpCgojIyBIYXVnYWxhbmRldAoKYGBge3IgQm9zdGVkX0hhdWdhbGFuZGV0XzF9CmhsZF9ib3MgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBUb3RhbHQpKSArCiAgZ2VvbV9saW5lKCkgKwogIGxhYnModGl0bGUgPSAiSGF1Z2FsYW5kZXQiKSsKICB5bGFiKCJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpgYGB7ciBCb3N0ZWRfSGF1Z2FsYW5kZXRfMn0Kc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lIGMoMTEwNiwgMTEzNSwgMTE0NSwgMTE0NiwgMTE0OSwgMTE1MSwgMTE2MCkpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gYEFsbGUgTsOmcmluZ2VyYCwgKGFuZ2xlPTApKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIGxhYnModGl0bGUgPSAiSGF1Z2FsYW5kZXQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBobGRfYm9zX2xvbmd9CmhsZF9ib3NfbG9uZyA8LSBzeXNzZWxfYm9zICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9IYXVnYWxhbmRldF8zX1N0w7hyc3RlX0Jvc3RlZH0KaGxkX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJIYXVnZXN1bmQiLCAiS2FybcO4eSIsICJWaW5kYWZqb3JkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIHg6IEhhdWdhbGFuZGV0OiBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhdWdhbGFuZGV0XzRfTWluc3RlX0Jvc3RlZH0KaGxkX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCb2tuIiwgIlNhdWRhIiwgIlR5c3bDpnIiLCAiVXRzaXJhIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIHg6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSBUeXN2w6ZyIG9nIFV0c2lyYSIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfM19TdMO4cnN0ZV9Cb3N0ZWR9CmhsZF9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzRfTWluc3RlX0Jvc3RlZH0KaGxkX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCb2tuIiwgIlNhdWRhIiwgIlR5c3bDpnIiLCAiVXRzaXJhIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSwgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKIyMgU3VubmhvcmRsYW5kCgpgYGB7ciBCb3N0ZWRfU3VubmhvcmRsYW5kXzF9CnN1bl9ib3MgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBUb3RhbHQpKSArCiAgZ2VvbV9saW5lKCkgKwogIGxhYnModGl0bGUgPSAiU3VubmhvcmRhbGFuZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKYGBge3IgQm9zdGVkX1N1bm5ob3JkbGFuZF8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjExLCA0NjEyLCA0NjEzLCA0NjE0LCA0NjE1LCA0NjE2LCA0NjE3KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIlN1bm5ob3JkbGFuZCIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIHN1bl9ib3NfbG9uZ30Kc3VuX2Jvc19sb25nIDwtIHN5c3NlbF9ib3MgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX1N1bm5ob3JkbGFuZF8zX1N0w7hyc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCw7htbG8iLCAiS3Zpbm5oZXJhZCIsICJTdG9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiB4OiBTdW5uaG9yZGxhbmQ6IELDuG1sbywgS3Zpbm5oZXJhZCBvZyBTdG9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX1N1bm5ob3JkbGFuZF80X01pbnN0ZV9Cb3N0ZWR9CnN1bl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiRXRuZSIsICJGaXRqYXIiLCAiU3ZlaW8iLCAiVHlzbmVzIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIHg6IFN1bm5ob3JkbGFuZDogRXRuZSwgRml0aGFyLCBTdmVpbyBvZyBUeXNuZXMiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX1N1bm5ob3JkbGFuZF8zX1N0w7hyc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCw7htbG8iLCAiU3RvcmQiLCAiS3Zpbm5oZXJhZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTdW5uaG9yZGxhbmQ6IELDuG1sbywgS3Zpbm5oZXJhZCBvZyBTdG9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzRfTWluc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJFdG5lIiwgIlN2ZWlvIiwgIkZpdGphciIsICJUeXNuZXMiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU3VubmhvcmRsYW5kOiBFdG5lLCBGaXRqYXIsIFN2ZWlvIG9nIFR5c25lcyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgojIyBIYXJkYW5nZXIKCmBgYHtyIEJvc3RlZF9IYXJkYW5nZXJfMX0KaGFyX2JvcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJIYXJkYW5nZXIiLCB5PSAiQWxsZSBOw6ZyaW5nZXIiKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpgYGB7ciBCb3N0ZWRfSGFyZGFuZ2VyXzJ9CnN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDQ2MTgsIDEyMjgpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IGBBbGxlIE7DpnJpbmdlcmApKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygnIzExMTExMScsJyMwNTQ5ODcnKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKSArCiAgIGxhYnModGl0bGUgPSAiSGFyZGFuZ2VyIiwgeCA9ICLDhXIiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgaGFyX2Jvc19sb25nfQpoYXJfYm9zX2xvbmcgPC0gc3lzc2VsX2JvcyAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGFyZGFuZ2VyX0Jvc3RlZH0KaGFyX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4geDogSGFyZGFuZ2VyOiBPZGRhIG9nIFVsbGVuc3ZhbmciLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhcmRhbmdlcl9Cb3N0ZWR9Cmhhcl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiT2RkYSIsICJVbGxlbnN2YW5nIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhcmRhbmdlcjogT2RkYSwgVWxsZW5zdmFuZyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgojIE9wcGdhdmUgNAoKUGVuZGxpbmcgZXIgZXQgdmlrdGlnIGJlZ3JlcCDDpSBicnVrZSBuw6VyIHZpIHNuYWtrZXIgb20gcmVnaW9uYWwgdXR2aWtsaW5nLiBEZSB1bGlrZSBrb21tdW5lbmUgZWxsZXIgcmVnaW9uZW5lIGthbiBoYSB1bGlrZSBiZWhvdi4gRGUgYWxsZXIgZmxlc3RlIGtvbW11bmVyIGhhciBmb3IgbGl0ZSBhcmJlaWRzcGxhc3NlciBpIGZvcmhvbGQgdGlsIGFudGFsbCBhcmJlaWRlbmUuICBEZXQgdmlsIHNpIGF0IGRlIGZsZXN0ZSBwbGFzc2VyIGVyIGRlIGF2aGVuZ2lnZSBhdiDDpSBwZW5kbGUgdGlsIGFuZHJlIHBsYXNzZXIuIERldCBrYW4gdsOmcmUgYW5kcmUga29tbXVuZXIgaSBzYW1tZSByZWdpb24gZWxsZXIgYW5kcmUgcmVnaW9uZXIuIERldCBmaW5uZXMgb2dzw6UgYmVncmVwZXQgbmV0dG8gaW5ucGVuZGxpbmcgc29tIGJldHlyIGF0IG5vZW4ga29tbXVuZXIgZWxsZXIgcmVnaW9uZXIgaGFyIGZsZXJlIGFyYmVpZHNwbGFzc2VyIHRpbGdqZW5nZWxpZ2UgZW5uIGRlIGhhciBmb2xrIHRpbCDDpSBqb2JiZSBkZXIgaW5uYWQgaSBrb21tdW5lbi4gVmkgc2thbCBzZSBww6UgaW5ucGVuZGxpbmcgb2cgdXRwZW5kbGluZyBzb20gdmlsIGt1bm5lIGZvcnRlbGxlIG9zcyBpIGh2aWxrZW4gZ3JhZCBldCBzdGVkIGVyIGludGVncmVydCBpIGV0IHN0w7hycmUgYXJiZWlkc21hcmtlZCBodHRwczovL3JlZ2lvbmFsYW5hbHlzZS5uby9yYXBwb3J0LzMwMDQvMS80LiAKClZpIGhhciBsYWdldCBlbiB0YWJlbGwgc29tIHRhciBmb3Igc2VnIHJlZ2lvbmVuIEhhdWdhbGFuZGV0LiBIZXIga2FuIHZpIHNraWxsZSBkZSBmb3Jza2plbGxpZ2Uga29tbXVuZW5lIG9nIHNlIGh2b3IgIGFuZGVsZW4gYXYgaW5ucGVuZGxpbmcgb2cgdXRwZW5kbGluZyBlciBzdMO4cnN0IGVsbGVyIG1pbnN0LiAgCgpWaSBrYW4gc2UgcMOlIEthcm3DuHkgc29tIGV0IGVrc2VtcGVsIG7DpXIgZGV0IGdqZWxkZXIgaW5ucGVuZGxpbmcgb2cgdXRwZW5kbGluZy4gSSBLYXJtw7h5IGtvbW11bmUgZXIgZGV0IDExNjM3IHN0eWtrIHNvbSBqb2JiZXIgaSBlZ2VuIGtvbW11bmUsIG1lbnMgNTg4OCBwZW5kbGVyIHRpbCBhbmRyZSBrb21tdW5lciBpIHJlZ2lvbmVuLiBIZXJhdiBwZW5kbGVyIDQ5MTYgcGVyc29uZXIgdGlsIEhhdWdlc3VuZCwgOSBwZW5kbGVyIHRpbCBTYXVkYSwgMzEgcGVuZGxlciB0aWwgQm9rbiwgNzEyIHRpbCBUeXN2w6ZyLCAyMTggdGlsIFZpbmRhZmpvcmQgIG9nIDIgcGVyc29uZXIgcGVuZGxlciB0aWwgVXRzaXJhLiBOw6VyIGRldCBrb21tZXIgdGlsIGlubnBlbmRsaW5nIGthbiB2aSBzZSBhdCBkZXQgdGlsIHNhbW1lbiBlciAzMzg0IHNvbSBwZW5kbGVyIHRpbCBLYXJtw7h5IGZyYSBIYXVnbGFuZHNyZWdpb25lbi4gRGVuIHN0w7hyc3RlIGFuZGVsZW4gZnJhIHNhbW1lIHJlZ2lvbiBzb20gcGVuZGxlciB0aWwgS2FybcO4eSBlciBIYXVnZXN1bmQuIFZpIGthbiBzZSBmcmEgdGFiZWxsZW4gYXQgZGV0IGVyIDI1ODYgc3R5a2tlciBzb20gcGVuZGxlciBmcmEgSGF1Z2VzdW5kIHRpbCBLYXJtw7h5LiAKClDDpSBVdHNpcmEgc29tIGhhciBlbiBtaW5kcmUgYmVmb2xrbmluZyBzZXIgdmkgYXQgODUgam9iYmVyIGkgaGplbWtvbW11bmVuLCBtZW5zIDkgc3RrIHBlbmRsZXIgdGlsIGFuZHJlIGtvbW11bmUgaSByZWdpb25lbiwgaGVuaG9sZHN2aXMgdGlsIEhhdWdlc3VuZCwgVHlzdsOmciBvZyBLYXJtw7h5LiAgIAoKUMOlIEhhdWdhbGFuZGV0IGthbiB2aSBzZSAgCgpgYGB7ciBQZW5kbGluZyBww6UgSGF1Z2FsYW5kZXR9CmhnbF9QZW5kbGluZwpgYGAKCmBgYHtyIFBlbmRsaW5nIGkgU3VubmhvcmRsYW5kfQpzdW5fUGVuZGxpbmcKYGBgCgotICAgCgpgYGB7ciBzaXN0ZX0KIyBTaXN0ZQpgYGAKCi0gICAK
=======
LS0tCnRpdGxlOiAiQXJiZWlkc2tyYXYgdsOlcmVuIDIwMjIiCmF1dGhvcjoKLSBLZXZpbiBIYQotIE9sYSBBbmRyZSBPbG9mc3NvbgotIEFubiBFbGlzYWJldGggSmFjb2JzZW4KLSBIZWlkaSBNYXJpZSBSb2xmc25lcwotIERhbmllbCBLYXJzdGFkCi0gSGVucmlldHRlIEhhbnNlbgotIFN1c2FubiBCaXJrZWxhbmQgU2l2ZXJ0c2VuCi0gVmlsZGUgSGF1Z2xhbmQKc3VidGl0bGU6IE1TQjEwNiwgQW52ZW5kdCBieS0gb2cgcmVnaW9uYWzDuGtvbm9taQpvdXRwdXQ6CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKbGFuZzogbm8tTkIKZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IHNlbnRlbmNlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeShyZWFkcikKICBsaWJyYXJ5KGdncGxvdDIpCiAgbGlicmFyeShrbml0cikKICBsaWJyYXJ5KHZpcmlkaXMpCiAgbGlicmFyeSh0aWR5dmVyc2UpCiAgfSkKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89RkFMU0UsIGluY2x1ZGUgPSBUUlVFKQpgYGAKCiMgUm9tbGlnZSBmb3Jza2plbGxlciBpIG7DpnJpbmdzc3RydWt0dXIsIHZpcmtuaW5nZXIgYXYgZWtzb2dlbmUgc2pva2sgaSBiYXNpc3N5c3NlbHNldHRpbmdlbiwgb2cgbG9rYWxlIGZvcnNramVsbGVyIEkgc3lzc2Vsc2V0dGluZ3N2ZWtzdC4KCkkgZGVubmUgb3BwZ2F2ZW4gdmlsIHZpIHNlIHDDpSBuw6ZyaW5nc3N0cnVrdHVyZXIgcMOlIEhhdWdhbGFuZGV0LCBTdW5uaG9yZGxhbmQgb2cgSGFyZGFuZ2VyLgoKUHJvYmxlbXN0aWxsaW5nZXIgb2cgYmVyZWduaW5nZXIgdmkgdmlsIHNlIG7DpnJtZXJlIHDDpQoKLSAgIEJlc2tyaXZlIHNpdHVhc2pvbmVuIHNsaWsgZGVuIGVyIGZvciAyMDIwLCBvZyBmb3IgdXR2aWtsaW5nZW4gb3ZlciB0aWQuCi0gICBTeXNzZWxzZXR0aW5nc3V0dmlrbGluZ2VuIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciBvZyBmb3IgcmVnaW9uZW4gc2FtbGV0LgotICAgQW5kZWxlbiBhdiBzeXNzZWxzZXR0aW5nZW4gaW5uZW5mb3IgZW5rZWx0bsOmcmluZ2VyLCBvZyBzYW1tZW5saWduZSBzaXR1YXNqb25lbiBvZyB1dHZpa2xpbmdlbiBmb3IgbG9rYWxlIGtvbW11bmVyIG9nIGxva2FsIHJlZ2lvbiBtZWQgZGV0IHNvbSBnamVsZGVyIGZvciBuYXNqb25lbiBzYW1sZXQuCi0gICBCZXJlZ25lIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciwgb2cgZm9yIHJlZ2lvbmVuKGUpIHNhbWxldC4KLSAgIEJlcmVnbmUgdWxpa2UgYWdncmVnZXJpbmdzbml2w6VlciBhdiBuw6ZyaW5nZXIgb2cgZ2VvZ3JhZmksIGlkZW50aWZpc2VyIG11bGlnZSBrbHluZ2VyIGJhc2VydCBww6UgdmVyZGllbmUgZm9yIGxva2FsaXNlcmluZ3Nrdm90aWVudGVuZS4KLSAgIEdqw7hyZSBlbiB2dXJkZXJpbmcgYXYgaHZvciBrb25zZW50cmVydC9zcHJlZHQgZW4gbsOmcmluZyBlciBmb3JkZWx0IG1lbGxvbSBrb21tdW5lbmUgaSByZWdpb25lbiwgYmFzZXJ0IHDDpSBiZXJlZ25pbmdlciBhdiBkZW4gcm9tbGlnZSBHaW5pLWluZGVrc2VuLgotICAgVnVyZGVyZSBvbSBzYW1tZW5saWduaW5nc2dydW5ubGFnZXQgYsO4ciB2w6ZyZSBzYW1sZXQgc3lzc2Vsc2V0dGluZyBpIHJlZ2lvbmVuLCBlbGxlciBzYW1sZXQgc3lzc2Vsc2V0dGluZyBhdiBuYXNqb25lbiwgb2cgZmlubmUgdXQgaHZpbGtlbiByb2xsZSBkZXQgc3BpbGxlciBvbSBlbiBicnVrZXIgcmVnaW9uYWxlIGVsbGVyIG5hc2pvbmFsZSBhbnNsYWcgZm9yIHNhbWxldCBzeXNzZWxzZXR0aW5nLgotICAgRmlubmUgdXQgb20gbsOmcmluZ3NzdHJ1a3R1cmVuIGkgcmVnaW9uZW4gaGFyIGJsaXR0IG1lciBlbGxlciBtaW5kcmUgZGl2ZXJzaWZpc2VydCwgbWFuZ2ZvbGRpZywgb3ZlciB0aWQuCi0gICBCZXJlZ25lIGVuIHJlZ2lvbmFsIG1hbmdmb2xkLWluZGVrcyBvZyBmaW5uZSB1dCBodm9yZGFuIHZlcmRpZW5lIHDDpSBlbiBzbGlrIGluZGVrcyBlciBlbmRyZXQgb3ZlciB0aWQuCi0gICBWdXJkZXJlIG9tIHN5c3NlbHNldHRpbmdzYW5kZWxlbmUgc2thbCBzYW1tZW5saWduZXMgbWVkIG5hc2pvbmFsZSBlbGxlciByZWdpb25hbGUgYW5kZWxlciBmb3IgZGUgdWxpa2UgbsOmcmluZ2VuZQotICAgR2plbnRhIGJlcmVnbmluZ2VyIGZvciBhbmRlbGVyIGF2IGFyYmVpZHN0YWtlcmUgaSB1bGlrZSBuw6ZyaW5nZXIsIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyLCBkZW4gcm9tbGlnZSBHaW5pLSBrb2VmZmlzaWVudGVuIG9nIG3DpWxldCBmb3IgbWFuZ2ZvbGQgYXYgbsOmcmluZ2VyLCBtZWQgdXRnYW5nc3B1bmt0IGkgZGF0YSBzcGVzaWZpc2VydCBldHRlciBhcmJlaWRzdGFrZXJuZXMgYm9zdGVkLgotICAgU2FtbWVubGlnbmUgcmVzdWx0YXRlbmUgZm9yIGRhdGEgZXR0ZXIgYXJiZWlkc3N0ZWQsIG9nIGtvbW1lbnRlciBodmlsa2VuIGluZm9ybWFzam9uIHJlc3VsdGF0ZW5lIGdpciBvbSByb21saWcgbW9iaWxpdGV0IGkgYXJiZWlkc21hcmtlZGV0LgotICAgR2kgZW4ga29ydCBvdmVyc2lrdCBvdmVyIHBlbmRsZXJzdHLDuG1tZXIgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuCi0gICBCZXJlZ25lIG9nIHByZXNlbnRlcmUgYW5kZWxlciBhdiBhcmJlaWRzdGFrZXJlIG1lZCBib3N0ZWQgaSBlbiBrb21tdW5lIHNvbSBoYXIgYXJiZWlkc3N0ZWQgaSBhbmRyZSBrb21tdW5lciwgb2cgZ2rDuHIgZGV0IHNhbW1lIGZvciBhbmRlbGVuIGF2IGpvYmJlbmUgaSBlbiBrb21tdW5lIHNvbSBlciBiZXNhdHQgYXYgYXJiZWlkc3Rha2VyZSBmcmEgYW5kcmUga29tbXVuZXIuCi0gICBEaXNrdXRlcmUgZm9yc2tqZWxsZXIgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuLCBvZyBkcsO4ZnQgdXR2aWtsaW5nZW4gb3ZlciB0aWQgZm9yIHVsaWtlIGtvbW11bmVyCi0gICBCZXJlZ25lIG9nIHByZXNlbnRlcmUgYW5kZWxlbiBhdiBhcmJlaWRzdGFrZXJlIHNvbSBib3Igb2cgam9iYmVyIGlubmVuZm9yIHNhbW1lIGtvbW11bmUuIFNlIG9tIGRldCBlciBzeXN0ZW1hdGlza2UgZm9yc2tqZWxsZXIgc2V0dCBpIGZvcmhvbGQgdGlsIHNlbnRyYWxpdGV0IG9nIHRpbGdqZW5nZWxpZ2hldCBpIGRldCBsb2thbGUgYXJiZWlkc21hcmtlZGV0LiBPZyBvbSBkZXQgZXIgYmVzdGVtdGUgdHJlbmRlciBpIHV0dmlrbGluZ2VuIGZvciB1bGlrZSBrb21tdW5lci4KLSAgIEJydWtlIGJlcmVnbmluZ2VuZSBhdiBsb2thbGlzZXJpbmdrdm90aWVudGVyIHRpbCDDpSBkZWxlIG7DpnJpbmdlbmUgaW5uIGkgbG9rYWwtIG9nIGJhc2lzbsOmcmluZ2VyCi0gICBGb3JtdWxlcmUgZW4gw7hrb25vbWlzayBiYXNlbW9kZWxsIG9nIGJlcmVnbmUgw7hrb25vbWlza2UgYmFzZW11bGlwbGlrYXRvcmVyIGZvciBlbmtlbHRrb21tdW5lciBvZyByZWdpb24oZXIpLgotICAgVnVyZGVyZSBsb2thbGUgdmlya25pbmdlciBhdiBhbHRlcm5hdGl2ZSBsb2thbGlzZXJpbmdlciBpIE9kZGEsIEh1c25lcyBvZyBMZWlydmlrCi0gICBEcsO4ZnRlIHZpcmtuaW5nZXIgYXYgZXQgc2xpa3QgcG9zaXRpdnQgZWtzb2dlbnQgc2pva2sgZm9yIGRlbiBsb2thbGUgw7hrb25vbWllbiBnamVubm9tIGJydWsgYXYgZW4gYmFzZW1vZGVsbAotICAgRmlubmUgdXQgaHZvcmRhbiB2aXJrbmluZ2VuZSBldmVudHVlbHQgc3ByZXMgdGlsIGFuZHJlIGtvbW11bmVyIGkgcmVnaW9uZW4gb2cgaHZvcmRhbiBlbiBrYW4gYnJ1a2UgZGF0YSBmb3IgcGVuZGxlc3Ryw7htbWVyIHRpbCDDpSBwcmVkaWtlcmUgdmlya25pbmdlciBww6Ugc3lzc2Vsc2V0dGluZ2VuIGkgdWxpa2Uga29tbXVuZXIuCi0gICBTYW1tZW5saWduZSBkaXNzZSBwcmVkaWtzam9uZW5lIG1lZCBkZSB2aSBmw6VyIG7DpXIgdmkgZ2plbm5vbWbDuHJlciBhbmFseXNlbiBww6UgcmVnaW9uYWx0IG5pdsOlLgotICAgR2kgZW4gc2hpZnQtc2hhcmUgYW5hbHlzZSBpIGVuIGRpc2t1c2pvbiBhdiBmb3Jza2plbGxlciBpIHZla3N0IGZvciBla3NlbXBlbCBtZWxsb20gaW5kcmUsIG1pZHRyZSBvZyB5dHJlIGRlbGVyIGF2IHJlZ2lvbmVuLCBlbGxlciBldmVudHVlbHQgb21yw6VkZXIva29tbXVuZXIgc29tIGhhciBoYXR0IHN0ZXJrIG9nIHN2YWsgYmVmb2xrbmluZ3N1dHZpa2xpbmcuCgojIyBPdmVyc2lrdCBvdmVyIGJlZm9sa25pbmdlbmUgaSByZWdpb25lbmUKCiMjIyBIYXVnYWxhbmRldApIYXVnYWxhbmRldCBiZXN0w6VyIGF2IGtvbW11bmVuZSBCb2tuICg4NTIpLCBIYXVnZXN1bmQgKDM3MzU3KSwgS2FybcO4eSAoNDIxODYpLCBTYXVkYSAoNDU5NSksIFR5c3bDpnIoMTEwNjUpLCBVdHNpcmEoMTk4KSBvZyBWaW5kYWZqb3JkKDg3MTQpLiB0aWxzYW1tZW4gYm9yIGRldCAxMDQ5NjcgcGVyc29uZXIgaSBkZW5uZSByZWdpb25lbi4gaSB0aWRzcGVyaW9kZW4gdmkgaGFyIGhlbnRldCBpbm4gZGF0YSBoYXIgZGV0IHZlcnQga29tbXVuZXNhbW1lbnNsw6VpbmcgaSBkZW5uZSByZWdpb25lbi4gRGEgYmxlIMOYbGVuIG9nIHZpbmRhZmpvcmQgc2zDpXR0IGkgc2FtbWVuIHRpbCBlbiBrb21tdW5lIChodm9yZGFuIGhhciB2aSB0YXR0IGhlbnN5biB0aWwgZGV0dGU/Pz8pCgojIyMgU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcKU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcgYmVzdMOlciBhdiBrb21tdW5lbmUgQsO4bWxvKDExOTU3KSwgRXRuZSg0MDYyKSwgRml0amFyKDMxODkpLCBLdmlubmhlcmFkKDEzMDcxKSwgU3RvcmQoMTg3NTkpLCBTdmVpbyg1NzY2KSwgVHlzbmVzKDI4NjkpIG9nIFVsbGVuc3ZhbmcoMTEwNDgpLiBUaWxzYW1tZW4gYm9yIGRldCA3MDcyMSBwZXJzb25lciBpIGRlbm5lIHJlZ2lvbmVuLgoKVGFsbGVuZSBlciBoZW50ZXQgZnJhIFNTQiAwOS4wMS4yMSAoaHR0cHM6Ly93d3cuc3NiLm5vL3N0YXRiYW5rL3RhYmxlLzAxMjIzL3RhYmxlVmlld0xheW91dDEvKSBnamVsZGVyIGZvciA0IGt2YXJ0YWwgMjAyMC4KCmBgYHtyIGNzdl9maWxlcn0Kc3lzc2VsX2FyYiA8LSByZWFkX2NzdigiRGF0YS9zeXNzZWxfYXJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmhsZF9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvaGxkX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzdW5fYXJiIDwtIHJlYWRfY3N2KCJEYXRhL3N1bl9hcmIuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGFyX2FyYiA8LSByZWFkX2NzdigiRGF0YS9oYXJfYXJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCnN5c3NlbF9ib3MgPC0gcmVhZF9jc3YoIkRhdGEvc3lzc2VsX2Jvcy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpobGRfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL2hsZF9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKc3VuX2JvcyA8LSByZWFkX2NzdigiRGF0YS9zdW5fYm9zLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmhhcl9ib3MgPC0gcmVhZF9jc3YoIkRhdGEvaGFyX2Jvcy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpQZW5kbGluZyA8LSByZWFkX2NzdigiRGF0YS9QZW5kbGluZy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpoZ2xfUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvaGdsX1BlbmRsaW5nLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCnN1bl9QZW5kbGluZyA8LSByZWFkX2NzdigiRGF0YS9zdW5fUGVuZGxpbmcuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKYGBgCgojIDEgU3lzc2Vsc2V0dGluZyBJIFVsaWtlIE7DpnJpbmdlciwgRXR0ZXIgQXJiZWlkc3N0ZWQKCiMjIEhhdWdhbGFuZGV0CgpGw7hyc3RlIHJlZ2lvbmVuIHZpIHZlbGdlciDDpSBzZSBww6UgZXIgSGF1Z2FsYW5kZXQuIEhlciDDuG5za2VyIHZpIMOlIHNlIHDDpSB1dHZpa2xpbmdlbiBmcmEgMjAwOCB0aWwgMjAyMCwgYXYgYW50YWxsIGFuc2F0dGUgaSBzaW4gaGVsaGV0IGkgcmVnaW9uZW4sIHNhbXQgZGUgNiBtZXN0IHJlbGV2YW50ZSBuw6ZyaW5nZW5lLgoKYGBge3IgQXJiZWlkc3N0ZWRfSGF1Z2FsYW5kZXRfMX0KaGxkX2FyYiAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDE6IEhhdWdhbGFuZGV0IikrCiAgeWxhYigiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKSSAyMDIwIGVyIGRldCBpIHVuZGVya2FudCBhdiA1MCAwMDAgYW5zYXR0ZSBpIGFsbGUgbsOmcmluZ2VyIHDDpSBIYXVnYWxhbmRldC4gQXYgRmlnLiAxIHNlciB2aSBhdCBIYXVnYWxhbmRldCBmaWtrIGVuIG5lZGdhbmcgaSBhbnRhbGwgYW5zYXR0ZSBpIDIwMTUgb2cgMjAxNi4gSSAyMDE3IG9nIDIwMTggYmxlIGRldCB2ZWtzdCwgZnJlbSB0aWwgZGV0IHNudWRkZSBpIDIwMTkgaWdqZW4uCgpgYGB7ciBBcmJlaWRzc3RlZF9IYXVnYWxhbmRldF8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYygxMTA2LCAxMTM1LCAxMTQ1LCAxMTQ2LCAxMTQ5LCAxMTUxLCAxMTYwKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBgQWxsZSBOw6ZyaW5nZXJgLCAoYW5nbGU9MCkpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDI6IEhhdWdhbGFuZGV0IiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKSSBGaWcuIDIgc2VyIHZpIGF0IGZsZXJlIGF2IGtvbW11bmVuZSBww6UgSGF1Z2FsYW5kZXQgaGFyIGhhdHQgbGl0ZW4gYXJiZWlkc3BsYXNzdmVrc3QsIG1lZCB1bm50YWsgYXYgVHlzdsOmciwgVmluZGFmam9yZCBvZyBLYXJtw7h5IGkgZGVuIHNpc3RlIHRpw6Vyc3BlcmlvZGVuLiBWaSBzZXIgZGV0dGUgbWVyIHR5ZGVsaWcgcMOlIGZpZy4gMyBvZyA0LgoKYGBge3IgaGxkX2FyYl9sb25nfQpobGRfYXJiX2xvbmcgPC0gc3lzc2VsX2FyYiAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfM19TdMO4cnN0ZV9BcmJlaWRzdGVkfQpobGRfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkhhdWdlc3VuZCIsICJLYXJtw7h5IiwgIlZpbmRhZmpvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMzogSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAyKSkgKyAKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9IYXVnYWxhbmRldF80X01pbnN0ZV9BcmJlaWRzdGVkfQpobGRfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gNDogSGF1Z2FsYW5kZXQ6IEJva24sIFNhdWRhIFR5c3bDpnIgb2cgVXRzaXJhIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAyKSkgKyAKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpCmBgYAoKRmlndXIgMyBvZyA0IHZpc2VyIHV0dmlrbGluZ2VuIGF2IGRldCB0b3RhbGUgYW50YWxsIGFuc2F0dGUgaSBhbGxlIG7DpnJpbmdlciBww6Uga29tbXVuYWx0IG5pdsOlLCBpbm5lbmZvciBIYXVnYWxhbmQtcmVnaW9uZW4uCgpJIGRpc3NlIGZpZ3VyZW5lLCBzw6Ugc2VyIHZpIHR5ZGVsaWcgYXQgSGF1Z2VzdW5kIGhhciBoYXR0IHJlZHVrc2pvbiBpIGFudGFsbCBhbnNhdHRlIHRvdGFsdCBzZXR0LCBtZW5zIEthcm3DuHksIFZpbmRhZmpvcmQgb2cgVHlzdsOmciBoYXIgaGF0dCBlbiBtYXJrYW50IHZla3N0IGRlIHNpc3RlIHRpIMOlcmVuZS4gU2lkZW4gSGF1Z2VzdW5kIGhhciBmbGVzdCBhcmJlaWRzcGxhc3NlciBiZXR5ciB1dHZpa2xpbmdlbiBpIEhhdWdlc3VuZCBteWUgZm9yIGRlIHNhbWxlZGUgdGFsbGVuZS4KCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19IYXVnZWxhbmRldF8zX1N0w7hyc3RlX0FyYmVpZHNzdGVkfQpobGRfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkhhdWdlc3VuZCIsICJLYXJtw7h5IiwgIlZpbmRhZmpvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA1OiBIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzRfTWluc3RlX0FyYmVpZHNzdGVkfQpobGRfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA2OiBIYXVnYWxhbmRldDogQm9rbiwgU2F1ZGEsIFR5c3bDpnIgb2cgVXRzaXJhIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkZpZ3VyIDUgb2cgNiB2aXNlciB1dHZpa2xpbmdlbiBhdiBkZSA2IG1lc3QgcmVsZXZhbnRlIG7DpnJpbmdlbmUgaSBIYXVnYWxhbmRzcmVnaW9uZW4gcMOlIGtvbW11bmUgbml2w6UuCgpWaSBzZXIgaSBkZSB0cmUgc3TDuHJzdGUga29tbXVuZW5lLCBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCB1dGdqw7hyIG7DpnJpbmdlbmUgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciBvZyBJbmR1c3RyaSBkZSBzdMO4cnN0ZS4gSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciBoYXIgdm9rc3QgamV2bnQgb2cgdHJ1dHQgZGUgc2lzdGUgdGnDpXJlbmUsIG1lbnMgYW50YWxsIGFuc2F0dGUgaSBpbmR1c3RyaW7DpnJpbmdlbiBoYXIgdmFyaWVydCBmcmEga29tbXVuZSB0aWwga29tbXVuZS4gSSBIYXVnYWxhbmRldCB1dGdqw7hyIHByaW3DpnJuw6ZyaW5nZXIgKGpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSkgZW4gc3TDuHJyZSBhbmRlbCwgZW5uIGhvcyBLYXJtw7h5IG9nIEhhdWdlc3VuZCBodm9yIHByaW3DpnJuw6ZyaW5nZW5lIGt1biB1dGdqw7hyZSBlbiBsaXRlbiBhbmRlbC4KCiMjIyBTeXNzZWxzZXR0aW5nc3V0dmlrbGluZ2VuIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciBvZyBmb3IgcmVnaW9uZW4gc2FtbGV0LiAKCkRldCBlciByZWxhdGl2dCBzdG9yZSBrb21tdW5ldmlzZSBmb3Jza2plbGxlciBpIG7DpnJpbmdzc3RydWt0dXJlbi4KUm9nYWxhbmQgaGFyIGVuIGZvcmhvbGRzdmlzIGVuc2lkaWcgbsOmcmluZ3NzdHJ1a3R1ciwgb2xqZSBvZyBnYXNzIGVyIGRvbWluZXJlbmRlLiBGeWxrZXQgZXIgc3V2ZXJlbnQgZG9taW5lcmVuZGUgZm9yIGZvc3NpbCBlbmVyZ2kuIERlIGhhciBmb3Igw7h2cmlnIGRlIHNpc3RlIMOlcmVuZSBzYXRzZXQgcMOlIGV0IGVuIG1lciBkaWZmZXJlbnNpZXJ0IG7DpnJpbmdzc3RydWt0dXIgb2cgbsOmcmluZ3NsaXYgdmVkIMOlIHNhdHNlIHDDpSBoZWxzZSwgSUtUIG9nIGZvcm55YmFyIGVuZXJnaS4KCkkgdsOlcmUgbW9kZWxsZXIsIGVyIHNhdHNpbmdlbiBww6UgaGVsc2UgZGVuIG1lc3QgdHlkZWxpZ2UuIEF2IHJlbnQgdGVrbmlza2UgZ3J1bm5lciBlciBkZXQgdmFuc2tlbGlnIMOlIHNlIHV0dmlrbGluZ2VuIGkgZW5rZWx0ZSBuw6ZyaW5nZXIgc29tIHV0Z2rDuHIgc23DpSBhbmRlbGVyLCBww6UgZ3J1bm4gYXYgc2thbGFlbiBzb20gZXIgYmVueXR0ZXQuIFRpbCB0cm9zcyBmb3IgZGV0dGUsIGthbiBtYW4gc2UgYXQgbsOmcmluZ3NzdHJ1a3R1cmVuIGkgcmVnaW9uZW4gc2FtbGV0IGdlbmVyZWx0IHNldHQgaGFyIGVuZHJldCBzZWcgbGl0ZS4KClJvZ2FsYW5kIGhhciBnb2RlIGpvcmRicnVrc211bGlnaGV0ZXIsIG1lbiBpIEZpZy4gMjogSGF1Z2FsYW5kZXQgc2VyIHZpIGVuIG5lZGdhbmcgaSBzeXNzZWxzZXR0aW5nZW4gZGUgc2lzdGUgdGnDpXJlbmUsIG1lbnMgZGV0IGVyIGVuIG1hcmdpbmFsIMO4a25pbmcgaSBTdW5uaG9yZGFsYW5kLCBqZi4gRmlnIDkuIEkgRmlnLiAxMjogc2VyIHZpIGF0IFR5c25lcyBoYXIgaGF0dCBlbiBtYXJrYW50IMO4a25pbmcgaSBwcmltw6ZybsOmcmluZ2VuLCByZWxhdGl2dCBzZXR0LgoKVW5pdmVyc2l0ZXRzLSBvZyBow7hnc2tvbGVzZWt0b3JlbiBlciBsaXRlbiBpIFJvZ2FsYW5kLCBvZyBkZW4gYmVzdMOlciBmb3IgZGV0IGbDuHJzdGUgYXYgVW5pdmVyc2l0ZXRldCBpIFN0YXZhbmdlciAoVWlTKSBvZyBIw7hnc2t1bGVuIHDDpSBWZXN0bGFuZGV0IChIVkwpIG1lZCBjYW1wdXMgSGF1Z2VzdW5kLgoKSGF1Z2FsYW5kIFZla3N0LCBzb20gZXIgZWlnZC9kcmV2ZXQgYXYgSGF1Z2FsYW5kc3JlZ2lvbmVuIGVyIGkgc3Bpc3NlbiBww6Ugw6UgbGVnZ2UgdGlsIHJldHRlIGZvciDDpSBldGFibGVyZSBueSBpbmR1c3RyaSBzYW10IGFuZHJlIGFyYmVpZHNwbGFzc2VyIGkgcmVnaW9uZW4uCgpJIGhlbHNlc2VrdG9yZW4gZXIgU3RhdmFuZ2VyIHVuaXZlcnNpdGV0c3N5a2VodXMgKFN1Uykgc2VudHJhbHQuCgojIyBTdW5uaG9yZGxhbmQKClZpZGVyZSDDuG5za2VyIHZpIMOlIHNlIHDDpSBkZW4gc2FtbWUgdXR2aWtsaW5nZW4sIG1lbiBkZW5uZSBnYW5nZW4gaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4uCgpgYGB7ciBBcmJlaWRzc3RlZF9TdW5uaG9yZGxhbmRfMX0Kc3VuX2FyYiAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDc6IFN1bm5ob3JkYWxhbmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCkhlciB2aXNlciBmaWd1ciA3IHV0dmlrbGluZ2VuIHRpbCBkZW4gdG90YWxlIHN1bW1lbiBhdiBhbnNhdHRlIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGZyYSAyMDA4IHRpbCAyMDIwLiBTdW5uaG9yZGFsYW5kIGhhciBpIDIwMjAgaSB1bmRlcmthbnQgYXYgMjUgNTAwIGFuc2F0dGUuIFZpIHNlciB1dCBpZnLDpSBmaWd1cmVuIGF0IFN1bm5ob3JkbGFuZHNyZWdpb25lbiBoYWRkZSBlaW4gbWFya2FudCB2ZWtzdCBpZnLDpSAyMDA4IHRpbCAyMDE0IG1lZCBwZXJpb2RhciBtZWQgc3ZhayBuZWRnYW5nLiBGcmEgMjAxNCBoYXIgZGV0IHbDpnJ0IGVuIHJlZHVrc2pvbiBpIHRvdGFsdCBhbnRhbGwgYW5zYXR0ZS4KCmBgYHtyIEFyYmVpZHNzdGVkX1N1bm5ob3JkbGFuZF8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjExLCA0NjEyLCA0NjEzLCA0NjE0LCA0NjE1LCA0NjE2LCA0NjE3KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gODogU3VubmhvcmRsYW5kIiwgeCA9ICLDhXIiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgOCB2aXNlciB1dHZpa2xpbmdlbiBhdiB0b3RhbHQgYW5zYXR0ZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBww6Uga29tbXVuZW5pdsOlIGkgaGVsZSByZWdpb25lbiBmcmEgMjAwOCB0aWwgMjAyMC4gRGVubmUgZmlndXJlbiBnaXIgb3NzIGVuIG92ZXJzaWt0LCBtZW4gZXIgaWtrZSBoZWlsdCBicnVrZXJ2ZW5uZWxpZy4gVmkgbGFnZXIgZGVybWVkIGVuIG1lciBvdmVyc2lrdGxpZyBmaWd1ciwgamYuIGZpZ3VyIDkgJiAxMC4KCmBgYHtyIHN1bl9hcmJfbG9uZ30Kc3VuX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX1N1bm5ob3JkbGFuZF8zX1N0w7hyc3RlX0FyYmVpZHN0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIkt2aW5uaGVyYWQiLCAiU3RvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gOTogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX1N1bm5ob3JkbGFuZF80X01pbnN0ZV9BcmJlaWRzdGVkfQpzdW5fYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiRml0amFyIiwgIlN2ZWlvIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxMDogU3VubmhvcmRsYW5kOiBFdG5lLCBGaXRoYXIsIFN2ZWlvIG9nIFR5c25lcyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKClZpIHNlciBoZXIgdXQgaWZyYSBmaWd1ciA5IG9nIDEwIHV0dmlrbGluZ2VuIGZvciBodmVyIGVua2VsdCBrb21tdW5lIGkgU3VubmhvcmRsYW5kIHRvdGFsdCBzZXR0LCBvZyBoZXIgc2VyIHZpIG15ZSB0eWRsaWdlcmUgdXR2aWtsaW5nZW4gZnJhIDIwMDggdGlsIDIwMjAuIEVuIGthbiBzZSBoZXIgYXQgS3Zpbm5oZXJhZCwgRXRuZSBvZyBGaXRqYXIgaGFyIGhhdHQgZW4gcmVkdWtzam9uIGkgdG90YWx0IGFuc2F0dGUsIG1lbnMgVHlzbmVzIG9nIFN2ZWlvIGhhciBoYXR0IGVpbiBrcmFmdGlnIHZla3N0LiBFbiBpbnRlcmVzc2FudCBiZW1lcmtpbmcgZXIgU3RvcmQgaSAyMDE0IG9nIEt2aW5uaGVyYWQgZnJhIDIwMDggdGlsIDIwMTcuCgpGb3Igw6UgZsOlIGV0IGJlZHJlIG92ZXJzaWt0IG92ZXIgdXR2aWtsaW5nZW4gaSBrb21tdW5lbiDDuG5za2VyIHZpIMOlIHNlIHDDpSBkZSA2IG1lc3QgcmVsZXZhbnRlIG7DpnJpbmdlbmUgaSBodmVyIGtvbW11bmUuCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQXJiZWlkc3N0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIlN0b3JkIiwgIkt2aW5uaGVyYWQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxMTogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzRfTWluc3RlX0FyYmVpZHNzdGVkfQpzdW5fYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiU3ZlaW8iLCAiRml0amFyIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDEyOiBTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGphciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkZpZ3VyIDExIG9nIDEyIHZpc2VyIGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIGh2ZXIgZW5rZWx0IGtvbW11bmUgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZnJhIDIwMDggdGlsIDIwMjAuCgpFbiBzZXIgdXQgaWZyYSBmaWd1ciAxMSBhdCBpIGRlIHRyZSBzdMO4cnN0ZSBrb21tdW5lbmUsICpCw7htbG8qLCAqS3Zpbm5oZXJhZCogb2cgKlN0b3JkKiBzw6UgaGFyIGRlIGFsbGUgaGF0dCBlbiByZWR1a3Nqb24gaSBpbmR1c3RyaWVuLCBzYW10aWRpZyBzb20gZGUgaGFyIGhhdHQgZW4gdmVrc3QgaSBoZWxzZS0gb2cgc29zaWFsdGplbmVzdGVyLiBUeXNuZXMgaGFyIHbDpnJ0IHN0YWJpbCBuw6VyIGRldCBrb21tZXIgdGlsIGluZHVzdHJpLCBtZW4gaGFyIHNldHQgZWluIG1hcmthbnQgdmVrc3QgaSBwcmltw6ZybsOmcmluZ2VuIChKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2UpLgoKIyMjIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCgpEZXQgZsO4cnN0ZSBiZW1lcmtlbHNlc3ZlcmRpZ2UgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZXIgZGVuIG1hcmthbnRlIHJlZHVrc2pvbmVuIGkgaW5kdXN0cmkgaSBTdG9yZCBrb21tdW5lIGkgMjAxNCwgc2FtdCBLdmlubmhlcmFkIGZyYSAyMDA4LiBEZXR0ZSBzdGVtbWVyIG92ZXJlbnMgbWVkIHRvIGhlbmRlbHNlci4gRGVuIGbDuHJzdGUgZXIgb2xqZWtuZWtrZW4gaSAyMDE0IHNvbSBtZWRmw7hydGUgYXQgYmwuYS4gQWtlciBTdG9yZCBBUyBzb20gZXIgYXZoZW5naWcgYXYgT2xqZS1pbmR1c3RyaWVuIG3DpXR0ZSBwZXJtaXRlcmUuCgpTdG9yZCBlciBlbiBrb21tdW5lIHNvbSBoYXIgbXllIG9mZnNob3JlIGluZHVzdHJpLiBJIDIwMDgvMjAwOSBzw6Ugc3Rlbmd0ZSBTw7hyLU5vcmdlIEFsdW1pbml1bSAiQi1IYWxsZW4iIHNvbSBtZWRmw7hydGUgNTAlIHJlZHVrc2pvbiBpIHByb2R1a3Nqb24sIG9nIGRlcm1lZCBhbnNhdHRlLiBJbnRlcmVzc2FudCDDpSBiZW1lcmtlIGF0IGkgS3Zpbm5oZXJhZCBzw6UgZXIgYW50YWxsIGluZHVzdHJpYXJiZWlkZXJlIHJlZHVzZXJ0IHNhbXRpZGlnIHNvbSBhbnRhbGwgYW5zYXR0ZSBpIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyIMO4a3QuIELDuG1sbyBoYXIgb2dzw6Ugc2V0dCBlbiBzdGFiaWwgcmVkdWtzam9uIGkgYW5zYXR0ZSBpbm5lbiBpbmR1c3RyaSwgc2FtdCB2ZWtzdCBpIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyIGZyZW0gdGlsIDIwMTguCgpTZXIgZW4gcMOlIGhlbGUgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGkgc2luIGhlbGhldCwgc8OlIHNlciB2aSBlbiBzdsOmcnQgdHlkZWxpZyB2ZWtzdCBpbm5lbiBIZWxzZS0gb2cgU29zaWFsZXRqZW5lc3Rlciwgb2cgcmVkdWtzam9uIGlubmVuIGluZHVzdHJpIGkgaGVsZSByZWdpb25lbi4gS3Zpbm5oZXJhZCwgVHlzbmVzIG9nIEZpdGphciBoYXIgb3BwbGV2ZCBlaW4gbWFya2FudCB2ZWtzdCBpbm5lbiBwcmltw6ZybsOmcmluZy4gKipLYW4gZGV0IHZlcmUgZWluIGdydW5uIHRpbCBkZXR0ZSBzb20gYnVyZGUgZGlza3V0ZXJhc3Q/PyoqCgojIEZvcnRzZXR0IEhlciAoT0EsIEtIKQoKIyMgSGFyZGFuZ2VyCgpUaWwgc2x1dHQgbcOlIHZpIGdqZXJlIGRldCBzYW1tZSBtZWQgKkhhcmRhbmdlcioKCkkgaGVuaG9sZCB0aWwgb3BwZ2F2ZW5zIGtyYXYgdGlsIGJldHJha3RlciB2aSAqSGFyZGFuZ2VyKiBmw7hyIDIwMTkgc29tIFVsbGVuc3ZhbmctIG9nIE9kZGEga29tbXVuZSBzb20gdG8gc2VwYXJlcnRlIGtvbW11bmVyLiBpIDIwMjAgc8OlIGJsZSBVbGxlbnN2YW5nLCBPZGRhIG9nIEpvbmRhbCBzbMOldHQgc2FtbWVuIHRpbCBVbGxlbnN2YW5nLiBEZXR0ZSBmb3JrbGFyZXIgZGVuIHZvbGRzb21tZSDDuGtuaW5nZW4gaSBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uZW4gdmVkIHRpZHNwdW5rdGV0IGZvciBrb21tdW5lc2FtbWVuc2zDpWluZy4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8xfQpoYXJfYXJiICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gw4VyLCB5ID0gVG90YWx0KSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTM6IEhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKQpgYGAKCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMTQ6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhhcl9hcmJfbG9uZ30KaGFyX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhcmRhbmdlcl9BcmJlaWRzdGVkfQpoYXJfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNTogSGFyZGFuZ2VyOiBPZGRhIG9nIFVsbGVuc3ZhbmciLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhcmRhbmdlcl9BcmJlaWRzc3RlZH0KaGFyX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKVWxsZW5zdmFuZyBrb21tdW5lIGhhciBzdG9yIGtyYWZ0cHJvZHVrc2pvbiBvZyBob3ZlZG7DpnJpbmdlbiBlciBpbmR1c3RyaS4gTWFqb3JpdGV0ZW4gYXYga3JhZnRwcm9kdWtzam9uZW4gZm9yZWfDpXIgaSB0aWRsaWdlcmUgT2RkYS4gT2RkYSBlciBldCBlbnNpZGlnIGluZHVzdHJpc3RlZCwgbWVuIGhhciBvZ3PDpSBlbiBtYXJpdGltIG7DpnJpbmcgaSB0aWxsZWdnLiBJIGZpZ3VyIDE2IHNlciB2aSBhdCBpbmR1c3RyaW7DpnJpbmdlbiB1dGdqw7hyIGVuIGJldHJha3RlbGlnIHN0w7hycmUgYW5kZWwgYXYgc3lzc2Vsc2V0dGluZ2VuIGkgaGVyLiBJbmR1c3RyaW7DpnJpbmdlbiBlciBvZ3PDpSBvbWZhdHRldCBvZyBieWdnLSBvZyBhbmxlZ2dzdmlya3NvbWhldC4gUMOlIG1vdHNhdHQgc2lkZSBlciBqb3JkYnJ1aywgaGVsc2UtIG9nIHNvc2lhbHRqZW5lc3RlciBkb21pbmVyZW5kZSBpIFVsbGVuc3ZhbmcuIAoKKkdlbmVyZWx0IG9tIFVsbGVuc3Zhbmcga29tbXVuZSoKVWxsZW5zdmFuZyBrb21tdW5lIChtZWQgT2RkYSkgaGFyIGhhdHQgZW4gamV2biBvZyBuZWdhdGl2IGJlZm9sa25pbmdzdmVrc3QgaSBtYW5nZSB0acOlci4gRGV0IGdqZW5zcGVpbGVzIGlra2UgdHlkZWxpZyBpIHbDpXJlIG1vZGVsbGVyIHDDpSBncnVubiBhdiBza2FsYWVuIHNvbSBlciBicnVrdC4gSSB0aWxsZWdnIGhhciB2aSBpa2tlIGhlbnN5bnRhdHQgaW5udmFuZHJlbmRlIGFyYmVpZGVyZSwgZWxsZXIgbWlkbGVydGlkaWdlIGZyYWZseXR0ZWRlIHNvbSBmb3IgZWtzZW1wZWwgc3R1ZGVudGVyLgoKIyAyIAoKYGBge3J9CmhhdTIwIDwtIHN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihhYXIgPT0gIjIwMjAiLCBrbmF2biA9PSAiSGF1Z2VzdW5kIikKYGBgCgpgYGB7cn0KMTkwNS8xODEzNwpgYGAKCmBgYHtyfQooaGF1MjAkSW5kdXN0cmkvaGF1MjAkYEFsbGUgTsOmcmluZ2VyYCkKYGBgCgpgYGB7cn0Kc3lzc2VsX2JvcyA8LSBzeXNzZWxfYm9zICU+JSAKICBtdXRhdGUoRWlyX0VyX2luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCkKYGBgCgoKYGBge3J9CgpgYGAKCgoKCiMgMyBTeXNzZWxzZXR0aW5nIEkgVWxpa2UgTsOmcmluZ2VyLCBFdHRlciBCb3N0ZWQgKE1vZGVsbGVyIFVuZGVyIEFyYmVpZCkKCiMjIEhhdWdhbGFuZGV0CgpgYGB7ciBCb3N0ZWRfSGF1Z2FsYW5kZXRfMX0KaGxkX2JvcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJIYXVnYWxhbmRldCIpKwogIHlsYWIoIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCmBgYHtyIEJvc3RlZF9IYXVnYWxhbmRldF8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYygxMTA2LCAxMTM1LCAxMTQ1LCAxMTQ2LCAxMTQ5LCAxMTUxLCAxMTYwKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBgQWxsZSBOw6ZyaW5nZXJgLCAoYW5nbGU9MCkpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgbGFicyh0aXRsZSA9ICJIYXVnYWxhbmRldCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhsZF9ib3NfbG9uZ30KaGxkX2Jvc19sb25nIDwtIHN5c3NlbF9ib3MgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhdWdhbGFuZGV0XzNfU3TDuHJzdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkhhdWdlc3VuZCIsICJLYXJtw7h5IiwgIlZpbmRhZmpvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4geDogSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfNF9NaW5zdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4geDogSGF1Z2FsYW5kZXQ6IEJva24sIFNhdWRhIFR5c3bDpnIgb2cgVXRzaXJhIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19IYXVnZWxhbmRldF8zX1N0w7hyc3RlX0Jvc3RlZH0KaGxkX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJIYXVnZXN1bmQiLCAiS2FybcO4eSIsICJWaW5kYWZqb3JkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhdWdhbGFuZGV0OiBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfNF9NaW5zdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGF1Z2FsYW5kZXQ6IEJva24sIFNhdWRhLCBUeXN2w6ZyIG9nIFV0c2lyYSIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgojIyBTdW5uaG9yZGxhbmQKCmBgYHtyIEJvc3RlZF9TdW5uaG9yZGxhbmRfMX0Kc3VuX2JvcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJTdW5uaG9yZGFsYW5kIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpgYGB7ciBCb3N0ZWRfU3VubmhvcmRsYW5kXzJ9CnN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDQ2MTEsIDQ2MTIsIDQ2MTMsIDQ2MTQsIDQ2MTUsIDQ2MTYsIDQ2MTcpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IGBBbGxlIE7DpnJpbmdlcmApKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKSArCiAgIGxhYnModGl0bGUgPSAiU3VubmhvcmRsYW5kIiwgeCA9ICLDhXIiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3Igc3VuX2Jvc19sb25nfQpzdW5fYm9zX2xvbmcgPC0gc3lzc2VsX2JvcyAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQm9zdGVkfQpzdW5fYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkLDuG1sbyIsICJLdmlubmhlcmFkIiwgIlN0b3JkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIHg6IFN1bm5ob3JkbGFuZDogQsO4bWxvLCBLdmlubmhlcmFkIG9nIFN0b3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzRfTWluc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJFdG5lIiwgIkZpdGphciIsICJTdmVpbyIsICJUeXNuZXMiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4geDogU3VubmhvcmRsYW5kOiBFdG5lLCBGaXRoYXIsIFN2ZWlvIG9nIFR5c25lcyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQm9zdGVkfQpzdW5fYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkLDuG1sbyIsICJTdG9yZCIsICJLdmlubmhlcmFkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlN1bm5ob3JkbGFuZDogQsO4bWxvLCBLdmlubmhlcmFkIG9nIFN0b3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfNF9NaW5zdGVfQm9zdGVkfQpzdW5fYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiU3ZlaW8iLCAiRml0amFyIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGphciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCiMjIEhhcmRhbmdlcgoKYGBge3IgQm9zdGVkX0hhcmRhbmdlcl8xfQpoYXJfYm9zICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gw4VyLCB5ID0gVG90YWx0KSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCmBgYHtyIEJvc3RlZF9IYXJkYW5nZXJfMn0Kc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lIGMoNDYxOCwgMTIyOCkpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gYEFsbGUgTsOmcmluZ2VyYCkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCcjMTExMTExJywnIzA1NDk4NycpKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpICsKICAgbGFicyh0aXRsZSA9ICJIYXJkYW5nZXIiLCB4ID0gIsOFciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBoYXJfYm9zX2xvbmd9Cmhhcl9ib3NfbG9uZyA8LSBzeXNzZWxfYm9zICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9IYXJkYW5nZXJfQm9zdGVkfQpoYXJfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiB4OiBIYXJkYW5nZXI6IE9kZGEgb2cgVWxsZW5zdmFuZyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGFyZGFuZ2VyX0Jvc3RlZH0KaGFyX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCiMgT3BwZ2F2ZSA0CgpQZW5kbGluZyBlciBldCB2aWt0aWcgYmVncmVwIMOlIGJydWtlIG7DpXIgdmkgc25ha2tlciBvbSByZWdpb25hbCB1dHZpa2xpbmcuIERlIHVsaWtlIGtvbW11bmVuZSBlbGxlciByZWdpb25lbmUga2FuIGhhIHVsaWtlIGJlaG92LiBEZSBhbGxlciBmbGVzdGUga29tbXVuZXIgaGFyIGZvciBsaXRlIGFyYmVpZHNwbGFzc2VyIGkgZm9yaG9sZCB0aWwgYW50YWxsIGFyYmVpZGVuZS4gIERldCB2aWwgc2kgYXQgZGUgZmxlc3RlIHBsYXNzZXIgZXIgZGUgYXZoZW5naWdlIGF2IMOlIHBlbmRsZSB0aWwgYW5kcmUgcGxhc3Nlci4gRGV0IGthbiB2w6ZyZSBhbmRyZSBrb21tdW5lciBpIHNhbW1lIHJlZ2lvbiBlbGxlciBhbmRyZSByZWdpb25lci4gRGV0IGZpbm5lcyBvZ3PDpSBiZWdyZXBldCBuZXR0byBpbm5wZW5kbGluZyBzb20gYmV0eXIgYXQgbm9lbiBrb21tdW5lciBlbGxlciByZWdpb25lciBoYXIgZmxlcmUgYXJiZWlkc3BsYXNzZXIgdGlsZ2plbmdlbGlnZSBlbm4gZGUgaGFyIGZvbGsgdGlsIMOlIGpvYmJlIGRlciBpbm5hZCBpIGtvbW11bmVuLiBWaSBza2FsIHNlIHDDpSBpbm5wZW5kbGluZyBvZyB1dHBlbmRsaW5nIHNvbSB2aWwga3VubmUgZm9ydGVsbGUgb3NzIGkgaHZpbGtlbiBncmFkIGV0IHN0ZWQgZXIgaW50ZWdyZXJ0IGkgZXQgc3TDuHJyZSBhcmJlaWRzbWFya2VkIGh0dHBzOi8vcmVnaW9uYWxhbmFseXNlLm5vL3JhcHBvcnQvMzAwNC8xLzQuIAoKVmkgaGFyIGxhZ2V0IGVuIHRhYmVsbCBzb20gdGFyIGZvciBzZWcgcmVnaW9uZW4gSGF1Z2FsYW5kZXQuIEhlciBrYW4gdmkgc2tpbGxlIGRlIGZvcnNramVsbGlnZSBrb21tdW5lbmUgb2cgc2UgaHZvciAgYW5kZWxlbiBhdiBpbm5wZW5kbGluZyBvZyB1dHBlbmRsaW5nIGVyIHN0w7hyc3QgZWxsZXIgbWluc3QuICAKClZpIGthbiBzZSBww6UgS2FybcO4eSBzb20gZXQgZWtzZW1wZWwgbsOlciBkZXQgZ2plbGRlciBpbm5wZW5kbGluZyBvZyB1dHBlbmRsaW5nLiBJIEthcm3DuHkga29tbXVuZSBlciBkZXQgMTE2Mzcgc3R5a2sgc29tIGpvYmJlciBpIGVnZW4ga29tbXVuZSwgbWVucyA1ODg4IHBlbmRsZXIgdGlsIGFuZHJlIGtvbW11bmVyIGkgcmVnaW9uZW4uIEhlcmF2IHBlbmRsZXIgNDkxNiBwZXJzb25lciB0aWwgSGF1Z2VzdW5kLCA5IHBlbmRsZXIgdGlsIFNhdWRhLCAzMSBwZW5kbGVyIHRpbCBCb2tuLCA3MTIgdGlsIFR5c3bDpnIsIDIxOCB0aWwgVmluZGFmam9yZCAgb2cgMiBwZXJzb25lciBwZW5kbGVyIHRpbCBVdHNpcmEuIE7DpXIgZGV0IGtvbW1lciB0aWwgaW5ucGVuZGxpbmcga2FuIHZpIHNlIGF0IGRldCB0aWwgc2FtbWVuIGVyIDMzODQgc29tIHBlbmRsZXIgdGlsIEthcm3DuHkgZnJhIEhhdWdsYW5kc3JlZ2lvbmVuLiBEZW4gc3TDuHJzdGUgYW5kZWxlbiBmcmEgc2FtbWUgcmVnaW9uIHNvbSBwZW5kbGVyIHRpbCBLYXJtw7h5IGVyIEhhdWdlc3VuZC4gVmkga2FuIHNlIGZyYSB0YWJlbGxlbiBhdCBkZXQgZXIgMjU4NiBzdHlra2VyIHNvbSBwZW5kbGVyIGZyYSBIYXVnZXN1bmQgdGlsIEthcm3DuHkuIAoKUMOlIFV0c2lyYSBzb20gaGFyIGVuIG1pbmRyZSBiZWZvbGtuaW5nIHNlciB2aSBhdCA4NSBqb2JiZXIgaSBoamVta29tbXVuZW4sIG1lbnMgOSBzdGsgcGVuZGxlciB0aWwgYW5kcmUga29tbXVuZSBpIHJlZ2lvbmVuLCBoZW5ob2xkc3ZpcyB0aWwgSGF1Z2VzdW5kLCBUeXN2w6ZyIG9nIEthcm3DuHkuICAgCgpQw6UgSGF1Z2FsYW5kZXQga2FuIHZpIHNlICAKCmBgYHtyIFBlbmRsaW5nIHDDpSBIYXVnYWxhbmRldH0KaGdsX1BlbmRsaW5nCmBgYAoKYGBge3IgUGVuZGxpbmcgaSBTdW5uaG9yZGxhbmR9CnN1bl9QZW5kbGluZwpgYGAKCi0gICAKCmBgYHtyIHNpc3RlfQojIFNpc3RlCmBgYAoKLSAgIAo=
>>>>>>> e4e87e393f8ec8ed4e746ef9efc5074257e27675